Active Record ninjas,
在语言之间跳跃我忘记了如何做到这一点:我正在寻找一种简洁的Rails方法来从相关模型中获取属性。
class Team < ActiveRecord::Base
belongs_to :captain, class_name: User
获取与团队相关联的一系列独特船长:
Team.all.map(&:captain_id).uniq
我想要做的就是获取唯一的队长名单并抓住每个人first_name
和last_name
。
我想做
Team.all.map(&:captain_id).uniq.pluck(:first_name, :last_name)
但pluck
不适用于数组。我可以在几个步骤中完成这个,但是Rails的方式是什么?
答案 0 :(得分:1)
您可以使用joins
和group
:
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倍。自己尝试一下:))