我有两个相关的ActiveObject
模型:
class Product < ActiveRecord::Base
belongs_to :product_type
#contains a field called name
end
class ProductType < ActiveRecord::Base
has_many :products
# contains a field called name
end
如果我使用他们的关系加入这两个模型,那一切都运作良好:
Product.joins(:product_type)
“SELECT \”products \“。* FROM \”products \“INNER JOIN \”product_types \“ON \”product_types \“。\”id \“= \”products \“。\”product_type_id \“”
但是现在我需要获得具有特定ProductType
的产品,而我所知道的产品类型是它的名称(每个产品类型的名称都是唯一的),所以我尝试使用条件正如Rails指南所建议的那样,联合表:
Product.joins(:product_type).where(:product_type => {:name => "MyProductTypeUniqueName"})
生成以下SQL:
"SELECT \"products\".* FROM \"products\" INNER JOIN \"product_types\" ON \"product_types\".\"id\" = \"products\".\"product_type_id\" WHERE \"product_type\".\"name\" = 'MyProductTypeUniqueName'"
不幸的是,它失败并出现以下错误:
ActiveRecord :: StatementInvalid:PG ::错误:错误:缺少表“product_type”的FROM子句条目
错误似乎发生是因为生成SQL时product_type列未包含在FROM子句中(至少'product_type.name'列不是)
使用PostgreSQL和Rails 3.2.3
使用to_sql
方法为返回的ActiveRecord::Relation
对象实例提供SQL结果
我知道我可以直接提供一个连接提供sql字符串,但这应该可以工作,因为它是一个几乎等于rails指南中的例子。 我做错了什么?
编辑:两个模型都包含一个名为“名称”的字段。包含在这种情况下,这是SQL无法正确构建的原因。
答案 0 :(得分:0)
试试这个,
Product.joins(:product_type).where(:table_name => {:name => "MyProductTypeUniqueName"})
其中:table_name是数据库
中的product_type表的名称