1

我有 3 个模型:

Article (:title)
  has_many :units
Dealer (:name, :adress)
  has_many :units
Unit (:price, :dealer_id, :article_id)
  belongs_to :article
  belongs_to :dealer

我不确定我的表是否完全正确,我不确定我应该使用 has_many :through 还是只是 has:many 和属于?究竟有什么区别?

rails 查询究竟会是什么样子?

Article.find(:name => "Cheese").units
Article.find(:name => "cheese").units.minimum('price').dealer 

这样复杂的 Rails 查询会在这种关系中起作用吗?

4

1 回答 1

2

您可以像这样声明 has_many :

Unit (:price, :dealer_id, :article_id)
  belongs_to :article
  belongs_to :dealer

Article (:title)
  has_many :units
  has_many :dealers, through: :units

Dealer (:name, :adress)
  has_many :units
  has_many :articles, through: :units

使用has_many :objects, through: :relation允许您访问特定条目的对象:

@dealer.articles
# and
@article.dealers

has_many through:是一种不同的方法has_and_belongs_to_many:它允许在连接模型上附加属性和验证Ruby 风格指南

执行以下操作将对数据库生成 2 个查询:

Article.find(:name => "Cheese").units

我们知道 Unit 模型有一个属性article_id。在这种情况下,最好的方法是(假设您知道文章的 id):

Unit.where(article_id: article.id)

这只会生成一个对数据库的查询。

于 2013-01-03T20:13:50.117 回答