我似乎没有完全理解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 *
我缺少什么让供应商表格与产品表一起加入自己的字段?
答案 0 :(得分:0)
那是因为你正在加入JOIN,现在你正在同时使用2个表。然后,rails会进行特定查询。
答案 1 :(得分:0)
初步评论:当使用Ruby on Rails(或任何其他SQL隐藏框架)时,不应该担心(太多)关于底层SQL查询。它们是根据需要生成的(可能是“次优”)
回答你的问题:'如何从产品对象中获取供应商信息'(或者至少我是如何阅读的)
belongs_to
,has_many
和其他关联为实现类添加了一个属性(在您的情况下为Product
和Vendor
类)。您可以使用此属性来获取关联对象的信息。
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中的关联的更多信息。