近況
転職してRailsマンに戻りました。(しばらくpythonおじさんだった)
やりたいこと
has_manyしているテーブルをselectするとき、コントローラの中でfindとか書かずに予めmodelの中に定義しておきたい。
(見た目スッキリさせたいとか、変数当てる必要がないから定義済みにしといた方が安全とか色々理由はあると思う)
どう書く?
lambdaを使うのが良いみたい。
app/models/user.rb
class User < ApplicationRecord
# Userに紐づく予定を記録したSchedulesテーブルがあり、そこから稼働日に該当する予定だけを抜き出したい
has_many :work_day, lambda { where not_work_day: True }, class_name: Schedules.name
end
コントローラからはこんな感じで書く。
app/controlers/user_controller.rb
def work_day
@result = User.find(id).includes(:work_day)
end