从 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_name
和 last_name
。
我想做
Team.all.map(&:captain_id).uniq.pluck(:first_name, :last_name)
但是 pluck
不适用于数组。我可以通过几个步骤完成此操作,但是 Rails 方法是什么?
您可以使用 joins
和 group
:
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 倍。自己试试吧:)
Active Record 忍者,
我正在寻找一种简洁的 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 方法是什么?
您可以使用 joins
和 group
:
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 倍。自己试试吧:)