我的 rails 3.2 应用程序中有这些代码
User.includes(:profile).limit(10)
从配置文件表中选择所有字段我需要一种方法来从配置文件表中选择特定字段以减少数据库查询我正在使用 postgresql
我的 rails 3.2 应用程序中有这些代码
User.includes(:profile).limit(10)
从配置文件表中选择所有字段我需要一种方法来从配置文件表中选择特定字段以减少数据库查询我正在使用 postgresql
你最好使用类似的东西
User.joins(:profile).select("users.*, profiles.field1, profiles.field2").limit(10)
我想你,要求选择方法。
User.includes(:profile).limit(10).select(:field1, :field2)
更新:
@Hassan 的答案并没有真正奏效。看这里(急切加载部分)
由于一次只加载一个表,因此条件或订单不能引用除主表之外的表。
尝试以下操作:
class User < ActiveRecord::Base
has_one :profile_w_name, -> { select(:id, :name, :user_id).limit(10) }, class_name: 'Profile'
end
User.includes(:profile_w_name).first.profile_w_name
不要忘记添加user_id
字段,因为 AR 会尝试预加载配置文件字段。
更新:
在我看到弃用警告抱怨急切加载和 SQL 片段用于引用(如select("post.id, comment.post_id")
. 需要导轨 4。
User.includes(:profile).select(:field1, :field2).references(:profile)
另请查看此要点以查看差异https://gist.github.com/astery/6137727
Rails 5 Way:只需添加对关联表名的引用。
User.includes(:profile).select("users.*, profiles.field1, profiles.field2").limit(10).references(:profiles)