【问题标题】:Ruby on Rails: How to order by intermediate model's field?Ruby on Rails:如何按中间模型的字段排序?
【发布时间】:2018-07-14 10:59:52
【问题描述】:

我在这样的关系中有一个共同的模型:

用户.rb

class User < ApplicationRecord
  has_many :likes

日记.rb

class Diary < ApplicationRecord
  has_many :likes
  has_many :liked_users, through: :likes, source: :user

like.rb

class Like < ApplicationRecord
  belongs_to :user
  belongs_to :diary

现在,我想订购

@diary.liked_users

likes.created_at.

哪种方式最简单,性能最快?

【问题讨论】:

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


    【解决方案1】:

    简答

    @diary.liked_users.order('likes.created_at ASC')

    为什么会这样?

    因此,rails 在内部发出如下查询:

    Select users.* FROM like INNER JOIN users ON users.id = like.user_id WHERE like.diary_id = 1
    

    这里的 1 只是您应用此方法的日记的 id 示例。

    这意味着likes 表已经存在于查询中

    因此@diary.liked_users.order('likes.created_at ASC') 会生成如下内容:

    Select users.* FROM likes INNER JOIN users ON users.id = likes.user_id WHERE likes.diary_id = 1 ORDER BY likes.created_at ASC
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多