活动记录忍者,
我正在寻找一种简洁的 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的方式是什么?
您可以执行以下操作:
captain_ids = Team.all.select(:captain_id)
User.where(id: captain_ids).pluck(:first_name, :last_name)
轨道应该足够智能,可以进行嵌套选择。
另一种选择是 joins
,它可以更高效(更快(,但在我的测试用例中,子选择比 INNER JOIN
快 3 倍。自己尝试一下:)
您可以使用
joins
和group
:
Team.joins(:captain)
.group("users.id")
.pluck("users.first_name", "users.last_name")