轨道4通过枢轴表多对多

时间:2013-11-06 09:44:01

标签: ruby-on-rails ruby-on-rails-4

我的模特:

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 eventJackGreat concert? 的含义

  1. 我想在现有活动中注册现有参赛者,
  2. 向现有事件添加新参与者,反之亦然。
  3. 正如我所说,许多2个似乎都是双向的,但是在现有对象的数据透视表中添加数据对我来说并不是很清楚。谢谢你的帮助。

    编辑:好的我有2个。

    @event.entrants.new(name: "hello") #adds a new Entrant works
    

1 个答案:

答案 0 :(得分:1)

你可以做(​​如j03w建议的那样)

   @event.entrants << @entrant

&lt;&lt;

是二进制左移算子
  

二进制左移运算符。左操作数值向左移动   右操作数指定的位数。

它也用于数组将给定对象推送到此数组的末尾。此表达式返回数组本身,因此可以将多个附加链接在一起。

  $: [] << 'a'
  -> ['a']