在我的 rails 应用程序中,用户可以参加事件 -

用户名

has_many :attendances
has_many :events, through: :attendances

事件.rb
has_many :attendances
has_many :users, through: :attendances

... 有一个由 event_id、user_id 和其他一些零碎组成的出勤表 -

考勤.rb
belongs_to :user
belongs_to :writers_event

在寻找特定出勤者时,我发现自己使用 .where ... .first - 例如
attendance = Attendance.where(user_id: @user.id, event_id: this_event_id).first

令我震惊的是,我错过了我们讨论在这种情况下使用 find_by 之类的东西的类(class) - 换句话说,您确信自己正在寻找独特的东西。这可能无关紧要,但是搜索一个集合然后从中取出第一个对象感觉是浪费和错误的。

有没有更好的办法?

我环顾四周,这是最接近的,但(我认为)并没有真正涵盖它。 How to display unique records from a has_many through relationship?

最佳答案

您可以为此使用 find_by:

attendance = Attendance.find_by(user_id: @user.id, event_id: this_event_id)

虽然在幕后,但它正在做一个查找并取得第一个。

但是,您可以在此处从 rails 获得更多帮助:
current_user.attendances.find_by(event_id: this_event_id)

10-08 14:08