通过 created_at 在关联而不是对象上对 HABTM 关联进行排序

Order HABTM associations by created_at on the association instead of the object

我有一个 MatchUser 模型,它们之间有一个 has_and_belongs_to_many。

如何根据 MatchUser 关联 的创建时间而不是 [=] 的时间检索 match.users.firstmatch.users.second 12=] 本身是创建的?

match.users.first

将 return 第一个用户 :id.

如果你想按 created_at 排序,那么你必须做类似

的事情
user_id = matches_users.where(match_id: match.id).first.user_id
user.find(user_id)

希望这就是您所看到的。

您首先不想使用 has_and_belongs_to_manyhas_and_belongs_to_many 关系是无头的——没有连接模型。在联接 table 中使用过的唯一列是两个外键。即使您将 created_at 列添加到联接 table 中,也无法访问它或使用它来对记录进行排序。而且 AR 无论如何都不会设置时间戳。

虽然您可以假设 has_and_belongs_to_many 关联的排序顺序与插入记录的顺序相同,但您无法真正排序。

您想使用 has_many through:,它使用模型连接两条记录:

class User < ApplicationRecord
  has_many :user_matches
  has_many :matches, through: :user_matches
end

class Match < ApplicationRecord
  has_many :user_matches
  has_many :users, through: :user_matches
end

class UserMatch < ApplicationRecord
  belongs_to :user
  belongs_to :match
end

然后您可以通过以下方式订购协会:

match.users.order("user_matches.created_at DESC")