钢轨的状况和顺序

Pau*_*lgo 5 activerecord ruby-on-rails activemodel

知道默认情况下 Rails 按 ID 对数据进行排序,那么如何按给定 where 子句的 id 进行排序呢?

ids = Bookmark.where(user_id: 7).order(created_at: :desc).pluck(:company_id)
Run Code Online (Sandbox Code Playgroud)

结果:

[146, 140, 128, 4, 2]

现在,当我尝试以相同的顺序获取这些公司时ids

Company.where(id: ids).pluck(:id)
Run Code Online (Sandbox Code Playgroud)

结果:

[2、4、128、140、146]

预期结果

[146, 140, 128, 4, 2]

我假装的结果在两种情况下都是相同的(相同的顺序)。返回公司的顺序应与创建该公司的书签的顺序相同。

小智 1

因此,看起来给定一个用户 ID,您需要一个created_at按连接用户和公司的书签日期排序的公司列表。

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

如果是这样的话,下面的“加入”可能适合您!

Company.joins(:bookmarks).where('bookmarks.user_id = ?', 7).order('bookmarks.created_at')
Run Code Online (Sandbox Code Playgroud)

当然,在您的代码中,这可以推广到为任何用户获取公司!

user_id = 42
companies = Company.joins(:bookmarks).where('bookmarks.user_id = ?', user_id).order('bookmarks.created_at')
Run Code Online (Sandbox Code Playgroud)

ActiveRecord“连接”参考