知道默认情况下,Rails通过ID对数据进行排序,如何通过给where子句提供的ID对数据进行排序?

ids = Bookmark.where(user_id: 7).order(created_at: :desc).pluck(:company_id)

结果:

[146、140、128、4、2]

现在,当我尝试从ids中以相同顺序获取公司时
Company.where(id: ids).pluck(:id)

结果:

[2,4,128,140,146]

预期结果:

[146、140、128、4、2]

我假装的结果在两种情况下都是相同的(相同的顺序)。
应按照创建该公司的书签的相同顺序退还这些公司。

最佳答案

因此,在给定用户ID的情况下,您想要一个按加入用户和公司的书签的created_at日期排序的公司列表。

我是否正确假设用户和公司通过书签共享多对多关系?

如果是这种情况,以下“join”可能对您有用!

Company.joins(:bookmarks).where('bookmarks.user_id = ?', 7).order('bookmarks.created_at')

当然,在您的代码中,这可以概括为任何用户使用公司!
user_id = 42
companies = Company.joins(:bookmarks).where('bookmarks.user_id = ?', user_id).order('bookmarks.created_at')

ActiveRecord "joins" reference

10-05 20:50