RAD*_*Dan 4 ruby activerecord ruby-on-rails
在我的rails应用程序中,用户可以参加活动 -
user.rb
has_many :attendances
has_many :events, through: :attendances
Run Code Online (Sandbox Code Playgroud)
event.rb
has_many :attendances
has_many :users, through: :attendances
Run Code Online (Sandbox Code Playgroud)
...有一个由event_id,user_id和其他一些零碎组成的考勤表 -
attendance.rb
belongs_to :user
belongs_to :writers_event
Run Code Online (Sandbox Code Playgroud)
在寻找特定的出勤时,我发现自己正在使用.where ... .first - 例如
attendance = Attendance.where(user_id: @user.id, event_id: this_event_id).first
Run Code Online (Sandbox Code Playgroud)
让我感到震惊的是,我错过了课堂,我们谈到了find_by在这种情况下使用的东西- 换句话说,你确信你正在寻找独特的东西.这可能没关系,但是搜索一个集合然后从中获取第一个对象会感到浪费和错误.
有没有更好的办法?
我环顾四周,这是最接近的,但不(我认为)真的覆盖它.如何通过has_many关系显示唯一记录?
它实际上非常简单:
attendance = Attendance.find_by(user_id: @user.id, event_id: this_event_id)
Run Code Online (Sandbox Code Playgroud)
你只需传递相同的条件find_by,它就会返回第一条记录.
虽然有一个问题.通过使用find_by,如果没有找到,你将得到零.如果你需要一个ActiveRecord::RecordNotFound凸起,如果没有找到,你可以使用find_by!.
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |