Модели:
class Item < ActiveRecord::Base
has_many :effect_per_items
has_many :effects, :through => :effect_per_items
end
class Effect < ActiveRecord::Base
has_many :effect_per_items
has_many :items, :through => :effect_per_items
end
class EffectPerItem < ActiveRecord::Base
belongs_to :item
belongs_to :effect
end
Промежуточная таблица:
t.integer "item_id"
t.integer "effect_id"
t.integer "rating"
Код:
irb> i = Item.new("name"=>"lsd", "category_id"=>"1", "duration_min"=>"1", "duration_max"=>"2", "peak_min"=>"3", "peak_max"=>"4", "plateau_min"=>"5", "plateau_max"=>"6", "tolerance_min"=>"7", "tolerance_max"=>"8", "weight_min"=>"9", "weight_max"=>"10")
=> #<Item id: nil, name: "lsd", duration_min: 1, duration_max: 2, peak_min: 3, peak_max: 4, plateau_min: 5, plateau_max: 6, tolerance_min: 7, tolerance_max: 8, weight_min: 9, weight_max: 10, rating: nil, category_id: 1>
irb> i.effect_ids = ["1", "2"]
Effect Load (0.1ms) SELECT `effects`.* FROM `effects` WHERE `effects`.`id` IN (1, 2)
(0.1ms) BEGIN
(0.0ms) COMMIT
=> ["1", "2"]
irb> i.effect_per_items
=> []
Затык в том, что я не знаю как писать в поле rating промежуточной таблицы. Объекты item и effect есть, но в промежуточной таблице пусто. Пусто до тех пор, пока не произойдёт сохранение объекта item.