我无法预加载belongs_to
关联。
有问题的模型有以下关联
class Order < ActiveRecord::Base
belongs_to :user_name, -> { select(:id, :name) }, class_name: "User", :foreign_key => 'user_id'
end
上述协会正常运作并按预期结算。
我想将user.id
和user.name
与order
一起返回。
如何预加载关联user_name
。
我确实尝试Order.includes(:user_name)
,但没有按预期工作。
答案 0 :(得分:0)
尝试添加如下所示的范围
scope : user_name_id, -> { joins(:user_name).select( 'user_names.id, user_names.name' ).collect{|c| [c.id, c.name]} }
答案 1 :(得分:0)
我会将关联更改为:
class Order < ActiveRecord::Base
belongs_to :user
end
并在其他地方选择users.id
和users.name
。它使您的代码更加灵活。
如何预加载关联
ActiveRecord
提供了几种方法:
LEFT OUTER JOIN
。因此,您可以在where condition中使用关联表。LEFT OUTER JOIN
在单个查询中加载关联。以下是一些有用的文章:
Preload, Eagerload, Includes and Joins
Making sense of ActiveRecord joins, includes, preload, and eager_load