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
提供了几种方法:

  • 。在单独的查询中加载关联数据。自从 预加载总是生成两个不能在中使用预加载表的sql 哪里有条件
  • 。默认情况下,在中加载关联数据 一个单独的查询,就像预加载一样。但是有额外的 call it从使用两个单独的查询切换到创建 单
    左外连接
    。这样,您就可以在where条件下使用关联表
  • 。使用
    左外部联接
    在单个查询中加载关联
  • 以下是一些有用的文章:


    这看起来很奇怪,为什么不先执行
    归属于:user
    然后再执行
    顺序。查找(1).user.name
    ?您不应该在关系中进行选择。您可以在模型中添加一个作用域,该作用域与
    Order.includes(:user\u name)