从belongs_to关联构建弹拨属性列表

时间:2017-11-09 21:01:21

标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord belongs-to

Active Record ninjas,

在语言之间跳跃我忘记了如何做到这一点:我正在寻找一种简洁的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的方式是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用joinsgroup

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

答案 1 :(得分:1)

您可以执行以下操作:

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

Rails应该足够聪明,可以进行嵌套选择。

另一个选项是joins,它可以更高效(更快),但在我的测试用例中,子选择比INNER JOIN快3倍。自己尝试一下:))