Кажется, что вы ищете здесь связь многих со многими.
Это должно работать для вас, учитывая установленные вами требования:
class Technician < ActiveRecord::Base
has_many :assignments
has_many :tools, :through => :assignments
end
class Tool < ActiveRecord::Base
has_many :assignments
has_many :technicians, :through => :assignments
end
class Assignment < ActiveRecord::Base
belongs_to :tool
belongs_to :technician
end
Надеюсь, это поможет.
UPDATE
Думая о вашем комментарии о наличии поля количества в Assignments
, я предполагаю, что вы хотите иметь возможность назначить множество одинаковых Tool
для Technician
. Например:
>> Technician.new(:name => "Bob").save
=> true
>> Tool.new(:name => "hammer").save
=> true
>> Tool.new(:name => "saw").save
=> true
>> t = Technician.first
=> #<Technician id: 1, name: "Bob", personal_id: nil, created_at: "2011-07-07 22:56:53", updated_at: "2011-07-07 22:56:53">
>> t.tools << [Tool.first, Tool.last]
=> [#<Tool id: 1, name: "hammer", internal_code: nil, category: nil, created_at: "2011-07-07 22:56:22", updated_at: "2011-07-07 22:56:22">, #<Tool id: 2, name: "saw", internal_code: nil, category: nil, created_at: "2011-07-07 22:56:30", updated_at: "2011-07-07 22:56:30">]
>> t.save
=> true
>> t.assignments
=> [#<Assignment id: 1, technician_id: 1, tool_id: 1, quantity: nil, created_at: "2011-07-07 23:01:53", updated_at: "2011-07-07 23:01:53">, #<Assignment id: 2, technician_id: 1, tool_id: 2, quantity: nil, created_at: "2011-07-07 23:02:46", updated_at: "2011-07-07 23:02:46">]
>> a = t.assignments.first
=> #<Assignment id: 1, technician_id: 1, tool_id: 1, quantity: nil, created_at: "2011-07-07 23:01:53", updated_at: "2011-07-07 23:01:53">
>> a.quantity = 5
=> 5
>> a.save
=> true
>> t.assignments.first.quantity
=> 5
>>
Если это не так, дайте мне знать, и я могу обновить с другим подходом.