4

我的 rails 3.2 应用程序中有这些代码

User.includes(:profile).limit(10)

从配置文件表中选择所有字段我需要一种方法来从配置文件表中选择特定字段以减少数据库查询我正在使用 postgresql

4

3 回答 3

9

你最好使用类似的东西

User.joins(:profile).select("users.*, profiles.field1, profiles.field2").limit(10)
于 2013-08-02T03:35:06.013 回答
7

我想你,要求选择方法。

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

于 2013-08-02T02:59:40.367 回答
1

Rails 5 Way:只需添加对关联表名的引用。

User.includes(:profile).select("users.*, profiles.field1, profiles.field2").limit(10).references(:profiles)
于 2019-11-09T17:52:40.677 回答