ruby-on-rails - rails 4 多对多通过数据透视表

标签 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 event 或将 Jack 映射到 Great concert含义

  1. 我想为现有事件注册现有参赛者,
  2. 向现有事件添加新参赛者,反之亦然。

正如我所说,很多 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/

相关文章:

ruby-on-rails - AWS Elastic Beanstalk 和 Every Gem

ruby-on-rails - 有条件地应用带有 :if => condition in rails 4 的 skip_before_filter

ruby-on-rails - RESTful rails 应用程序的简单面包屑

ruby-on-rails-4 - 冈比 2 带导轨

ruby-on-rails - 我如何在 haml 中执行内联 if 语句

ruby-on-rails - 直接链接(无重定向)到 ActiveStorage 中的文件

css - 如何将类属性添加到 rails 4 中选择标签的选项?

ruby-on-rails - 如何对嵌套资源的评论使用简单的形式?

ruby-on-rails - 在事件管理中创建自定义表单

ruby-on-rails - 如何配置设备以使用自定义电子邮件布局?