かなり複雑な検証をコーディングする必要がある場合、エラーは特定の属性にあるのではなく、それらのいくつかの組み合わせにある場合があります。
たとえば、:start_dateと:end_dateの間の期間に日曜日が含まれていないことを検証する場合、エラーはこれらのフィールドのいずれにも明確に属していませんが、Errorsaddメソッドで指定する必要があります。
かなり複雑な検証をコーディングする必要がある場合、エラーは特定の属性にあるのではなく、それらのいくつかの組み合わせにある場合があります。
たとえば、:start_dateと:end_dateの間の期間に日曜日が含まれていないことを検証する場合、エラーはこれらのフィールドのいずれにも明確に属していませんが、Errorsaddメソッドで指定する必要があります。
次のようなことを試してください。
# Your Model.rb
validate :my_own_validation_method
...
private
def my_own_validation_method
if there_is_no_sunday_in_the_range
self.errors[:base] << "You must have a Sunday in the time range!"
end
end
基本的に、独自の複雑な検証をモデルに追加できます。何かエラーが発生したことがわかったら、エラーの配列にエラー文字列を追加できます。
model_instance.errors[:base] << "msg"
上記の答えは時代遅れです。Rails 5以降の場合、最初のパラメーターとしてActiveModel::Errorsaddメソッドを呼び出す必要があります。:base
以下の例を参照してください。
model_instance.errors.add(
:base,
:name_or_email_blank,
message: "either name or email must be present"
)
errors[:base]
1つの属性(rails guide link )に特に関連付けられていない一般的なエラーを追加するために使用できます。
実際には、ハッシュキーに任意の名前を付けることができます。
instance.errors[:case_of_the_sundays] << "Error, son."
もう少し説明的です。
更新:エラーを追加するためのメッセージ配列は非推奨になりました。
今、私たちはそのようなことをします。
self.errors.add(:some_key, "Some Error!")