Rails select 记录使用数组

Rails select records using an array

我的 ProfilesController#Index:

中有此代码
      @profiles = []
      profile_ids = current_user.ratings.order(speed: :desc).pluck(:profile_id)
      profile_ids.each do |id|
        @profiles << Profile.find(id)
      end

我试过这样做:

@profiles = current_user.ratings.order(speed: :desc).pluck(:profile_id).each do |id|
    Profile.find(id)
end

但出于某种原因,这只会将 :profile_id 的值放入 @profiles 而不是我想要的实际 Profile(find(id))

有没有办法更优雅地做到这一点?

profile_ids = current_user.ratings.order(speed: :desc).pluck(:profile_id)
@profiles = Profile.where(:id => profile_ids)

第二行将在 Profile 模型中搜索给定数组 profile_ids
它会生成一个 SQL 像 SELECT * FROM profile WHERE id IN (1,2,3..)

编辑:另一种形式:@profiles = Profile.find(profile_ids)

首先选择配置文件 ID,然后执行 Profile.where(id: profile_ids).to_a 之类的操作的问题是您无法按预期顺序获得结果。

另一方面,您的查询的主要问题是您将执行 N+1 个查询,N 是 profile_ids 的大小。以下查询应仅执行两次,并按预期顺序为您提供配置文件:

profiles = current_user.ratings.order(speed: :desc).includes(:profile).map(&:profile)

有关 N+1 查询的详细信息here