我有Profile
,has_many :ratings
。我正在尝试检索具有特定rating
属性的配置文件集(在此实例中名为speed
),并且我想根据其rating.speed
对配置文件进行排名。
所以,我有以下声明:
# profile_ids has the correct order I want.
profile_ids = current_user.ratings.order(speed: :desc).pluck(:profile_id)
# @profiles doesn't...for some strange reason.
@profiles = Profile.where(id: profile_ids)
发生的问题是profile_ids
中的ID顺序与返回Profiles
的{{1}}的顺序不同。
具体来说,看看这个:
@profiles
请注意,来自> current_user.ratings.order(speed: :desc).pluck(:profile_id)
(9.6ms) SELECT "ratings"."profile_id" FROM "ratings" WHERE "ratings"."user_id" = $1 ORDER BY "ratings"."speed" DESC [["user_id", 7]]
=> [5, 18, 14, 7, 22, 13, 9, 17]
> @profiles.all.map(&:id)
Profile Load (7.0ms) SELECT "profiles".* FROM "profiles" WHERE "profiles"."id" IN (5, 18, 14, 7, 22, 13, 9, 17)
=> [18, 9, 13, 17, 22, 14, 5, 7]
的{{1}}的顺序与ids
生成的@profiles
的顺序不同,后者表示已重新排序。