我的数据库中有一个属性(:book
),我想限制为三个不同的值>>> :classic
,:modern
,:historic
我想创建一个自定义验证,以便在创建或更新该验证时,用户无法键入
book: classic
modern
historic
最佳答案
在任何具有book属性的模型中:
VALID_BOOKS = [:classic, :modern, :historic]
validate :has_valid_book
def has_valid_book
return if VALID_BOOKS.include? book.to_sym
errors.add :book, 'must be a valid book'
end
编辑
感谢MrYoshiji指出这个特殊情况可以简化为
VALID_BOOKS = [:classic, :modern, :historic]
validates :book, inclusion: { in: VALID_BOOKS.map(&:to_s) }
如果您的验证将来变得更加复杂(经常发生)并且需要一种实际的方法来解决该问题,我将在上面留下更详细的示例。