我的模型:
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
最佳答案
你可以做到(如 j03w 所建议的那样)
@event.entrants << @entrant
<< 是二元左移运算符
Binary Left Shift Operator. The left operands value is moved left by the number of bits specified by the right operand.
它也用于数组,将给定的对象推到数组的末尾。该表达式返回数组本身,因此多个追加可以链接在一起。
$: [] << 'a'
-> ['a']
关于ruby-on-rails - rails 4 多对多通过数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808592/