我很难弄清楚如何将我的一个模型与另一个模型关联起来。
就像现在一样,我有:
class ModelA < ActiveRecord::Base
has_many :model_b
end
class ModelB < ActiveRecord::Base
belongs_to :model_a
end
但是...... ModelB 不仅需要属于 ModelA 的一个实例,而且可能属于三个。我知道有一个 has_many :through,但我不确定在这种情况下它会如何工作。 ModelA 的每个实例将始终只有三个 ModelB 实例。但如前所述,ModelB 可以属于多个 ModelA 实例。
最佳答案
rails 中的多对多关系不使用 belongs_to
.相反,您想使用几个选项之一。第一个是has_and_belongs_to_many
:
# app/models/category.rb
class Category < ActiveRecord::Base
has_and_belongs_to_many :items
end
# app/models/item.rb
class Item < ActiveRecord::Base
has_and_belongs_to_many :categories
end
你需要在你的数据库中添加一个额外的连接表,迁移如下:class AddCategoriesItems < ActiveRecord::Migration
def self.up
create_table :categories_items, :id => false do |t|
t.integer :category_id
t.integer :item_id
end
end
def self.down
drop_table :categories_items
end
end
您可以看到连接表的名称是其他两个表名称的组合。表格必须按上述字母顺序提及,:id => false
需要在那里,因为我们不想要这个表上的主键。它将打破 Rails 协会。还有另一种更复杂的方法,称为
has_many :through
如果您需要存储有关关系本身的信息。我写了整篇文章,详细介绍了如何使用这两种方法以及何时使用每种方法:Basic many-to-many Associations in Rails
希望能帮到你,还有什么问题可以联系我!
关于ruby-on-rails - Rails 模型,属于很多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4394803/