delete / destroy question

I have a table with 2 columns, employee_id and job_id. There is no 'id'
column.

I can find a record by using the condition "employee_id = ? and job_id =
?"

but I cant seem to get delete or destroy to work. delete is an undefined
method, and destroy fails because [id] = null

Is there any way to get this to work, or do I just need to add an ID
column?

Bob Br wrote:

I have a table with 2 columns, employee_id and job_id. There is no 'id'
column.

It sounds like this is a join table between your Employee and Job models
for a has_and_belongs_to_many relationship.

but I cant seem to get delete or destroy to work. delete is an undefined
method, and destroy fails because [id] = null

Is there any way to get this to work, or do I just need to add an ID
column?

You probably want to remove entries through either the Employee class or
the Job class (depending on which makes the most sense at the time).
For example:

If:

job = Job.find(... # some condition
emp = Employee.find(... # some condition

then either:

job.employees.delete(emp)

or:

emp.jobs.delete(job)

It sounds like this is a join table between your Employee and Job models
for a has_and_belongs_to_many relationship.

Not as familiar with the mappings, but that sounds right. Heres what I
had in mind.

employees - table with X employees
jobs - table with Y jobs
exclusions - table of jobs that employees want hidden

For example
User A wants to see all of the jobs except for 1,2 and 3
User B wants to see all except 1, 7 and 12.

With the relationship you proposed, can I add and delete records from
the exclusion table without removing the job or the employee? Using the
above, User B now wants to see job 1, and User A wants to hide job 9.

I might be misinterpreting the code you wrote, but would that code just
delete the mapping (exclusion table) or would it delete the emp/job
record and delete the exclusions along with it?

Bob Br wrote:

With the relationship you proposed, can I add and delete records from
the exclusion table without removing the job or the employee? Using the
above, User B now wants to see job 1, and User A wants to hide job 9.

That's right. Treat a_job.employees and an_emp.jobs as arrays to add
and remove from. You can create items as you add them if necessary, but
removing them will not delete either item, just the association.

Obviously you can change the name of the association as an_emp.jobs
doesn't read right for excluded jobs and Rails will assume a join table
of employees_jobs so you'll have to specify that, too. Have a look at
the documentation for has_and_belongs_to_many for full details. Also
google for this as there are many good tutorials on how to handle these
relationships.

Excellent! Thanks for the help

Bob