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)
| 归档时间: |
|
| 查看次数: |
6126 次 |
| 最近记录: |