[英]How can I use Rails Validations to allow and attribute variable to be one of two values?
對於一個項目,我需要 Post class 的類別屬性為“小說”或“非小說”。 我嘗試了以下語法...
class CategoryValidator < ActiveModel::Validator
def validate(record)
unless (record.category == "Fiction" || "Non-Fiction")
record.errors[:category] << "Must be valid category"
binding.pry
end
end
end
但它從來沒有打到 binding.pry 行,這意味着它從來沒有打到“直到”塊,即使我故意輸入了錯誤的答案。 #validate 方法的正確語法是什么?
您檢查類別是'Fiction'
還是'Non-Fiction'
的條件不正確。
(record.category == "Fiction" || "Non-Fiction")
被評估為(record.category == "Fiction") || "Non-Fiction"
(record.category == "Fiction") || "Non-Fiction"
,因為==
的優先級高於||
. 因此,表達式將始終返回真實"Non-Fiction"
。 這就是為什么即使類別不是“有效”,您的代碼也永遠不會到達binding.pry
行的原因。
def validate(record)
unless %w(Fiction Non-Fiction).include?(record.category)
record.errors[:category] << "Must be valid category"
end
end
自定義驗證器對於這個用例來說太過分了。 您可以使用inclusion
來添加此驗證。
validates :category, inclusion: {
in: %w(Fiction Non-Fiction),
message: 'must be either Fiction or Non-Fiction'
}
我討厭自己,這么簡單的解決方法,我明白了
class CategoryValidator < ActiveModel::Validator
def validate(record)
unless (record.category == "Fiction" || record.category == "Non-Fiction")
record.errors[:category] << "Must be valid category"
end
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.