我正在尝试根据用户加入的时间对pod进行排序。用户和pod之间的关系由名为pod_users的连接表管理。
所以我有:
Pod.rb
has_many :pod_users, dependent: :delete_all
has_many :users, through: :pod_users
User.rb
has_many :pod_users
has_many :pods, through: :pod_users
Pod_user.rb
belongs_to :pod
belongs_to :user
当用户加入窗格时,会在pod_users中使用时间戳更新记录。我想根据created_at时间戳订购用户所属的pod列表。
以下是我根据specifying conditions on joined tables here的说明尝试的内容:
@pods = @user.pods.joins(:pod_users).where(pod_users: {user_id: @user.id}).order("pod_users.created_at DESC").paginate(page: params[:page])
我尝试过不同的版本。我也试过了:
@pods = @user.pods.joins(:pod_users).order("pod_users.created_at DESC").paginate(page: params[:page])
但后来我得到了重复项,因为pods有多个用户,当我执行pod_users连接时,会返回那些额外的记录。
有一种简单的方法吗?
谢谢。
答案 0 :(得分:1)
摆脱.joins(:pod_users)
并立即开始工作。由于您有has_many :pods, through: :pod_users
,因此当您执行@user.pods
时,rails已将pod_users作为连接添加到sql查询中。如果您想检查一下,请在控制台中执行@user.pods.to_sql
。
如果你这样做,你的东西应该有用:
@pods = @user.pods.order("pod_users.created_at DESC").paginate(page: params[:page])