Railsでスコープが失敗した場合にメッセージを返す方法はありますか?
概要
RailsプロジェクトにUserモデルがあります。スキーマには、ユーザーがアクティブかどうかを表すactiveと呼ばれるフィールドがあります。このようなスコープを追加しました。
# app/models/user.rb
scope :active, -> { where active: true }
私のユースケースは非常に単純で、次のようにアクティブなユーザーを見つけたいと考えています。
user = User.active.find_by!(token: token)
問題は、ActiveRecord::RecordNotFound エラーをキャッチするために begin とrescue を使用しないようにしたいことです。
私が望むのは、この例外をスローするのではなく、この例外をスローした場合のようにメッセージを返すことです。
validates :xyz, message: "invalid input"
この原因を達成する方法はありますか?
解決策
例外をキャッチしたくない場合は、find_by メソッドを使用してください。
bang を伴う Active Record メソッド (find_by!、save!、create!、first! など) でエラーが発生する
user = User.active.find_by(username: username)
if user.present?
# do something with user
else
# do something else
end