1

我似乎并没有完全理解 Rails 中的这种“关联”业务……希望有人能提供帮助。

模型一

class Vendor < ActiveRecord::Base
  has_many :products
end

模型二

class Product < ActiveRecord::Base
  belongs_to :vendor
end

当我去查找当前支持的所有“产品”然后关联供应商名称时......我没有得到正确的结果:

Product.where("is_supported = true").joins(:vendor)

结果查询是:

 SELECT `products`.* FROM `products` INNER JOIN `vendors` ON `vendors`.`id` = `products`.`vendor_id` WHERE (is_supported = true)

问题是 SELECT products.* 而不是 SELECT *

为了让供应商表将自己的字段与产品表连接起来,我缺少什么?

4

2 回答 2

0

那是因为您正在进行 JOIN,现在您正在同时处理 2 个表。然后,rails 进行特定查询。

于 2012-11-13T01:02:31.770 回答
0

初步评论:当使用 Ruby on Rails(或任何其他 SQL 隐藏框架)时,不应该(过多)担心底层 SQL 查询。它们是根据需要生成的(并且可能是“次优的”)

回答您的问题:“我如何从产品对象中获取供应商信息”(或者至少我是这样阅读的)

,belongs_tohas_many其他关联将属性添加到实现类(在您的情况下是ProductandVendor类)。您可以使用此属性来获取关联对象的信息。

p = getSomeProduct(...)
v = p.vendor
vendorName = p.vendor.name # or use v.name of course

此代码可能(无法检查以确保 ATM)生成并执行多个 SQL 查询。这是使用对开发人员隐藏 SQL 的框架所付出的代价。

有关 Ruby on Rails 中的关联的更多信息,请阅读Active Record 关联指南。

于 2012-11-13T01:07:26.637 回答