Ruby on rails Rails预加载关联
我无法预加载属于关联的Ruby on rails Rails预加载关联,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我无法预加载属于关联的文件 所讨论的模型具有以下关联 class Order < ActiveRecord::Base belongs_to :user_name, -> { select(:id, :name) }, class_name: "User", :foreign_key => 'user_id' end 类顺序{select(:id,:name)},class\u name:“user”,:foreign\u key=>'user\u id' 结束 上述协
文件
所讨论的模型具有以下关联
class Order < ActiveRecord::Base
belongs_to :user_name, -> { select(:id, :name) }, class_name: "User", :foreign_key => 'user_id'
end
类顺序{select(:id,:name)},class\u name:“user”,:foreign\u key=>'user\u id'
结束
上述协会运作良好,并按预期解决问题
我想返回user.id
和user.name
以及order
。
如何预加载关联用户名
我确实尝试了订购。包括(:user\u name)
,但没有按预期工作 尝试添加如下所示的作用域
scope : user_name_id, -> { joins(:user_name).select( 'user_names.id, user_names.name' ).collect{|c| [c.id, c.name]} }
我会将协会改为:
class Order < ActiveRecord::Base
belongs_to :user
end
类顺序
然后在别处选择users.id
和users.name
。它使您的代码更加灵活
如何预加载关联
class Order < ActiveRecord::Base
belongs_to :user_name, -> { select(:id, :name) }, class_name: "User", :foreign_key => 'user_id'
end
ActiveRecord
提供了几种方法:
左外连接
。这样,您就可以在where条件下使用关联表左外部联接
在单个查询中加载关联这看起来很奇怪,为什么不先执行
归属于:user
然后再执行顺序。查找(1).user.name
?您不应该在关系中进行选择。您可以在模型中添加一个作用域,该作用域与Order.includes(:user\u name)
?