2017-02-14 99 views
2

比方说包括我们有3个表:嵌套其中on Rails的

products (title, product_type_id) 
product_types (title) 
product_type_options (product_type_id, size) 

我要加载的产品,它的类型&只有特定product_type_options(product_type_options.size = 'XL'

是否有可能不施氮做+ 1在轨道查询?

喜欢的东西:

Product.includes(product_type: [product_type_options]) 
     .where("product_type_options.size = 'XL'") 

我不能让它使用where参数工作。任何想法?

+0

你得到了什么错误?您需要从查询 –

回答

3

这应该工作

Product.includes(product_type: :product_type_options) 
    .where(product_types: { product_type_options: { size: 'XL' } }) 
+0

中删除数组我认为:'错误:列product_types.product_type_options不存在'。 – knagode

+1

当然,我更新了答案。 – Iceman

+0

我注意到'.where(product_type_options:{size:'XL'})'有效,但不返回没有XL尺寸的产品(我想显示产品并告诉用户XL尺寸不可用) – knagode

-1

您可以使用加入

Product.joins(product_type: :product_type_options).where("product_type_options.size = 'XL'") 
-1

请试试这个,这是一个很小的语法变化。我没有测试过它。让我知道,如果它的工作原理:)

Product.includes(product_type: [product_type_options]) 
    .where("product_type_options.size" => 'XL') 
+0

答案就是这个问题的例子。那当时没有奏效。请改进您的答案或考虑删除它。 – Myonara

+0

我的回答是改善或解决问题。请参阅我所做的更改。任何人都可以从变化中推断出解决他自己的类似于这篇文章的问题。 –

1

@Iceman接近...它没有看到“product_types”的原因是因为它需要被表示为where子句中显式的哈希值,然后将Ruby做正确的嵌套...

Product.includes(product_type: :product_type_options) 
    .where({ product_types: { product_type_options: { size: 'XL' } } }) 

奇怪,但添加在where子句使得嵌套额外{}包括工作。