gpt4 book ai didi

ruby-on-rails - Rails 包括 where

转载 作者:行者123 更新时间:2023-12-02 21:12:38 27 4
gpt4 key购买 nike

我正试图加载一些关联,但我想对一些子关系进行过滤,这就是我的意思。

class MyModel < ActiveRecord::Base
has_many :my_model_details, dependent: :destroy
end

class MyModelDetails < ActiveRecord::Base
belongs_to :property
belongs_to :my_model
belongs_to :track
belongs_to :person
end

因此,如果我想获取所有 MyModel 对象,这些对象的详细信息属于具有属性名称的特定属性,我会这样做。

MyModel.includes(my_model_details: [:property, :person]).where('property.property_name = ?', 'Property name')

我想使用 includes 而不是 joins 的原因是我想将我的模型详细信息按最后一个属性和人名分组。所以我不想在那种情况下触发 N+1 查询。

如果我的查询返回带有两个 MyModelDetail 记录的单个 MyModel 对象。

其中 mymodeldetail id 1 具有属性 id 1,mymodeldetail id2 具有属性 id 2。它们都属于同一个人。

所以在我的 UI 上我会显示这个:

MyModel 1
MyModelDetail 2 - Property name: 'some name' - Person: 'Bob'

现在当我使用包含查询时会发生什么:

MyModel.includes(my_model_details: [:property, :person]).where('property.property_name = ?', 'Property name')

SELECT "MY_MODEL".* FROM "MY_MODEL" WHERE (PROPERTY.PROPERTY_NAME = 'Prop')

如果我在 where 中使用 includes,则根本不会生成连接 sql,因此此查询当然会失败:

"PROPERTY"."PROPERTY_NAME": invalid identifier

为什么,我使用的是 Rails 4?我怎样才能让它与连接和包含一起工作

最佳答案

我觉得应该是properties,因为表名根据CoC是复数的,试试用properties.property_name代替

MyModel.includes(my_model_details: [:property, :person]).where('properties.property_name = ?', 'Property name')

按照 BroiSatse 的建议,将 .references(:properties) 添加到您的查询中

希望对您有所帮助!

关于ruby-on-rails - Rails 包括 where,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32612596/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com