【发布时间】:2012-12-17 09:49:09
【问题描述】:
我有两个相关的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::Error: ERROR: missing FROM-clause entry for table "product_type"
错误似乎是因为在生成 SQL 时 product_type 列未包含在 FROM 子句中(至少 'product_type.name' 列不包含)
使用 PostgreSQL 和 Rails 3.2.3
SQL 结果是使用to_sql 方法为返回的ActiveRecord::Relation 对象实例提供的
我知道我可以直接提供 sql 字符串进行连接,但这应该可以工作,因为它是一个几乎等于 rails 指南中的示例。 我做错了什么?
编辑:两个模型都包含一个名为“名称”的字段。包括以防这是 SQL 未正确构建的原因。
【问题讨论】:
标签: ruby-on-rails-3 activerecord