如何确保where查询按其收到的ID的顺序执行?

时间:2016-11-07 01:56:15

标签: ruby-on-rails activerecord ruby-on-rails-5

我有Profilehas_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的顺序不同,后者表示已重新排序。

0 个答案:

没有答案