Gan*_*row 2 ruby-on-rails ruby-on-rails-4
我正在尝试加载一些关联,但我想对一些子关系进行过滤,这就是我的意思。
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
Run Code Online (Sandbox Code Playgroud)
因此,如果我想获取MyModel具有属于具有属性名称的特定属性的详细信息的所有对象,我会这样做。
MyModel.includes(my_model_details: [:property, :person]).where('property.property_name = ?', 'Property name')
Run Code Online (Sandbox Code Playgroud)
includes我想要 use而不是 的原因joins是我希望将模型详细信息按最后一个属性和人名分组。所以我不想在这种情况下触发 N+1 查询。
前任
如果我的查询返回MyModel带有两条记录的单个对象MyModelDetail。
其中 mymodeldetail id 1 的属性 id 为 1,mymodeldetail id2 的属性 id 为 2。并且它们都属于同一个人。
所以在我的用户界面上我会显示这个:
MyModel 1
MyModelDetail 2 - Property name: 'some name' - Person: 'Bob'
Run Code Online (Sandbox Code Playgroud)
现在,当我使用包含查询时会发生以下情况:
MyModel.includes(my_model_details: [:property, :person]).where('property.property_name = ?', 'Property name')
SELECT "MY_MODEL".* FROM "MY_MODEL" WHERE (PROPERTY.PROPERTY_NAME = 'Prop')
Run Code Online (Sandbox Code Playgroud)
如果我将 include 与 where 一起使用,则根本不会生成 join sql,因此该查询当然会失败:
"PROPERTY"."PROPERTY_NAME": invalid identifier
Run Code Online (Sandbox Code Playgroud)
为什么我使用的是 Rails 4?我怎样才能使它同时适用于连接和包含
我认为应该是properties,因为表名根据CoC是复数的,尝试properties.property_name使用
MyModel.includes(my_model_details: [:property, :person]).where('properties.property_name = ?', 'Property name')
Run Code Online (Sandbox Code Playgroud)
按照 BroiSatse 的建议,添加.references(:properties)到您的查询中
希望有帮助!
| 归档时间: |
|
| 查看次数: |
5284 次 |
| 最近记录: |