Rails3连接不包括连接列

时间:2012-12-17 09:49:10

标签: ruby-on-rails-3 activerecord

我有两个相关的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无法正确构建的原因。

1 个答案:

答案 0 :(得分:0)

试试这个,

Product.joins(:product_type).where(:table_name => {:name => "MyProductTypeUniqueName"})

其中:table_name是数据库

中的product_type表的名称