从 belongs_to 关联构建采摘属性列表

Build list of plucked attributes from belongs_to association

Active Record 忍者,

我正在寻找一种简洁的 Rails 方法从关联模型中获取属性。

class Team < ActiveRecord::Base
  belongs_to :captain, class_name: User

获取与团队关联的唯一队长数组:

Team.all.map(&:captain_id).uniq

我想做的是获取唯一的船长列表并获取每个人的 first_namelast_name

我想做

Team.all.map(&:captain_id).uniq.pluck(:first_name, :last_name)

但是 pluck 不适用于数组。我可以通过几个步骤完成此操作,但是 Rails 方法是什么?

您可以使用 joinsgroup:

Team.joins(:captain)
    .group("users.id")
    .pluck("users.first_name", "users.last_name")

您可以执行以下操作:

captain_ids = Team.all.select(:captain_id)
User.where(id: captain_ids).pluck(:first_name, :last_name)

Rails 应该足够聪明,可以嵌套 select.

另一个选项是 joins,它可以更有效(更快),但在我的测试用例中,sub-select 比 INNER JOIN 快 3 倍。自己试试吧:)