クラスの定義。
app/models/book.rb
class Book
include ActiveModel::Model
def self.raise_validation_error
raise ActiveRecord::RecordInvalid.new(self.new)
end
end
そして例外発生用のメソッドを呼ぶ。
Book.raise_validation_error
ポイント
- クラスメソッドでは引数として self.new を渡す。
- インスタンスメソッドでは引数として self を渡す。
- 詳しい例外メッセージを渡したい場合は、バリデーションを判定した後のモデルを引数として渡す。(後述)
必要性
new メソッドはバリデーションチェックをおこなわない。
Book.new(params)
という風に、モデルチックな関連付けをする場合に。
new の時点でバリデーションチェックをおこない、例外も起こしたかった。
以下は new! メソッドを定義した例。
app/models/book.rb
class Book
include ActiveModel::Model
attr_accessor :title
validates :title, presence: true
def self.new! (params = [])
model = self.new(params)
# invalid? は破壊的メソッド。ここで model にエラー情報が入る。
if model.invalid?
# エラー内容を反映した例外が起こる
raise ActiveRecord::RecordInvalid.new(model)
end
model
end
end
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
メンター受付