知道默认情况下,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