ruby-on-rails - Rails 模型,属于很多

标签 ruby-on-rails ruby-on-rails-3 associations model-associations

我很难弄清楚如何将我的一个模型与另一个模型关联起来。

就像现在一样,我有:

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/

相关文章:

ruby-on-rails - Rails 4、omniauth-facebook、rack-cors、Heroku 的 CORS 问题

mysql - 查询记录的最佳方式

ruby-on-rails-3 - has_many 通过构建

ruby-on-rails - 关联的 Rails 未初始化常量

sorting - 如何在 Grails 中按可空关联的属性排序?

ruby-on-rails - Rails 连接表或 HABTM 关联

ruby-on-rails - Rails 4:在生产环境的控制台中显示SQL

ruby-on-rails - 将一个 Controller 重定向到另一个 Controller

ruby-on-rails - 在 rails3 中使用非英语 Controller

ruby-on-rails-3 - 如何使用 RVM(linux 和 gedit)在 Rails3 中浏览 gem 的源代码