23

かなり複雑な検証をコーディングする必要がある場合、エラーは特定の属性にあるのではなく、それらのいくつかの組み合わせにある場合があります。

たとえば、:start_dateと:end_dateの間の期間に日曜日が含まれていないことを検証する場合、エラーはこれらのフィールドのいずれにも明確に属していませんが、Errorsaddメソッドで指定する必要があります。

4

6 に答える 6

31

次のようなことを試してください。

# 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

基本的に、独自の複雑な検証をモデルに追加できます。何かエラーが発生したことがわかったら、エラーの配列にエラー文字列を追加できます。

于 2012-05-30T14:46:40.637 に答える
9
model_instance.errors[:base] << "msg"
于 2012-05-30T14:51:59.430 に答える
7

上記の答えは時代遅れです。Rails 5以降の場合、最初のパラメーターとしてActiveModel::Errorsaddメソッドを呼び出す必要があります。:base以下の例を参照してください。

model_instance.errors.add(
  :base, 
  :name_or_email_blank, 
  message: "either name or email must be present"
)
于 2017-11-07T14:02:06.713 に答える
6

errors[:base]1つの属性(rails guide link )に特に関連付けられていない一般的なエラーを追加するために使用できます。

于 2012-05-30T14:46:32.650 に答える
1

実際には、ハッシュキーに任意の名前を付けることができます。

instance.errors[:case_of_the_sundays] << "Error, son."

もう少し説明的です。

于 2013-03-15T03:32:34.460 に答える
0

更新:エラーを追加するためのメッセージ配列は非推奨になりました。

今、私たちはそのようなことをします。

self.errors.add(:some_key, "Some Error!")
于 2021-06-24T22:14:18.100 に答える