我的模特:
class Entrant < ActiveRecord::Base
has_many :events, :through => :event_maps
has_many :event_maps, :foreign_key => "entrant_id"
accepts_nested_attributes_for :events, :reject_if => :all_blank
end
class Event < ActiveRecord::Base
has_many :event_maps, :foreign_key => "event_id"
has_many :entrants, :through => :event_maps
accepts_nested_attributes_for :entrants, :reject_if => :all_blank
end
class EventMap < ActiveRecord::Base
belongs_to :event, foreign_key: "event_id"
belongs_to :entrant, foreign_key: "entrant_id"
end
据我所知,我的映射是正确的,我可以在控制台上执行以下操作:
创建新活动并添加新参赛者:
@event = Event.new(name: 'my event');
@event.save
@event.entrants_attributes = [{name: 'Jack'}]
@event.save
创建新参赛者并添加新活动:
@entrant = Entrant.new(name: 'Peter')
@entrant.save
@entrant.events_attributes = [{name: 'Great concert'}]
@entrant.save
现在我如何将Peter
映射到my event
或Jack
到Great concert
?
的含义
正如我所说,许多2个似乎都是双向的,但是在现有对象的数据透视表中添加数据对我来说并不是很清楚。谢谢你的帮助。
编辑:好的我有2个。
@event.entrants.new(name: "hello") #adds a new Entrant works
答案 0 :(得分:1)
你可以做(如j03w建议的那样)
@event.entrants << @entrant
&lt;&lt;
是二进制左移算子二进制左移运算符。左操作数值向左移动 右操作数指定的位数。
它也用于数组将给定对象推送到此数组的末尾。此表达式返回数组本身,因此可以将多个附加链接在一起。
$: [] << 'a'
-> ['a']