簡體   English   中英

如何使用 Rails Validations 允許和屬性變量成為兩個值之一?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM