Rails Association问题

时间:2012-11-13 00:54:27

标签: ruby-on-rails

我似乎没有完全理解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产品。*而不是SELECT *

我缺少什么让供应商表格与产品表一起加入自己的字段?

2 个答案:

答案 0 :(得分:0)

那是因为你正在加入JOIN,现在你正在同时使用2个表。然后,rails会进行特定查询。

答案 1 :(得分:0)

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

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

belongs_tohas_many和其他关联为实现类添加了一个属性(在您的情况下为ProductVendor类)。您可以使用此属性来获取关联对象的信息。

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

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

请阅读guide to Active Record Associations以获取有关Ruby on Rails中的关联的更多信息。