3

我的模型:

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

现在我将如何映射Petermy eventJackGreat concert意义

  1. 我想为现有活动注册现有参赛者,
  2. 将新参赛者添加到现有活动中,反之亦然。

正如我所说,许多 2 many 似乎双向工作,但是将数据添加到现有对象的数据透视表对我来说并不是很清楚。谢谢您的帮助。

编辑:好的,我得到了 2。

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

1 回答 1

1

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

   @event.entrants << @entrant

<< 是二进制左移运算符,它

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

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

  $: [] << 'a'
  -> ['a']
于 2013-11-06T15:19:04.753 回答