将许多模型添加到另一个模型

时间:2012-08-21 19:05:19

标签: ruby-on-rails ruby ruby-on-rails-3

我目前正在开发一个使用Ruby On Rails 3.2的小项目来创建一个包含几个独特模型的数据库。每个模型都有许多元素,每个元素都有可能属于许多模型。我能够以下列方式设置模型:

class Model < ActiveRecord::Base
  has_many :model_elements
  has_many :elements, :through => :model_elements
  attr_accessible :elements, :name, :notes, :ref
end

class Element < ActiveRecord::Base
  has_many :model_elements
  has_many :models, :through => :model_elements
  attr_accessible :elementType, :name, :notes, :ref
  validates_presence_of :name
end

class ModelElement < ActiveRecord::Base
  belongs_to :Model
  belongs_to :element
  attr_accessible :model_id, :created_at, :element_id
end

我的问题是如何将多个元素添加到单个模型中?我试图找到一些文档,但我找不到任何东西。目前我正在尝试执行以下操作:

@model.elements = @element

其中@element是预定义的元素,但是它会抛出以下错误:

undefined method `each' for #<Element:0x007ff803066500>

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

尝试 @model.elements << @element

答案 1 :(得分:0)

collection.create(attributes = {})

返回已使用属性实例化的集合类型的新对象,通过连接表链接到此对象,并且已保存。

 @model.elements.create(:name => "example")

答案 2 :(得分:0)

Amar的回答是正确的。如果您愿意,可以使用has_and_belongs_to_many关联进一步简化模型。

class Model < ActiveRecord::Base
  has_and_belongs_to_many :elements, :join_table => :model_elements
end

class Element < ActiveRecord::Base
  has_and_belongs_to_many :models, :join_table => :model_elements
end

@model.elements << @element