gpt4 book ai didi

mysql - 在 Rails 中指定连接表的条件

转载 作者:行者123 更新时间:2023-11-29 12:14:07 24 4
gpt4 key购买 nike

我正在尝试根据用户加入 Pod 的时间对 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 时,会在 pod_users 中更新一 strip 有时间戳的记录。我想根据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])

但随后我得到了重复项,因为 Pod 有多个用户,当我执行 pod_users 加入时,这些附加记录会返回。

有没有简单的方法可以做到这一点?

谢谢。

最佳答案

去掉.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])

关于mysql - 在 Rails 中指定连接表的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30145464/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com