有多种方法可以做到这一点。
最直接的解决方案:
def check_depth
self.errors.add(:depth, "Issue with depth") if self.value > 2 # this does not support I18n
end
最干净的是使用模型验证(在 category.rb 的顶部,只需添加):
validates :depth, :inclusion => { :in => [0,1,2] }, :on => :create
如果您的验证逻辑变得更复杂,请使用自定义验证器:
# lib/validators/depth_validator.rb (you might need to create the directory)
class DepthValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
record.errors.add(attribute, "Issue with #{attribute}") if value > 2 # this could evene support I18n
end
end
在使用这个验证器之前,你需要在初始化器中加载它
# config/initializers/require_custom_validators.rb
require File.join('validators/depth_validator')
在更改之后(以及在验证器中进行任何更改之后),您需要重新启动您的 rails 服务器。
现在在您的类别模型中:
validates :depth, :depth => true, :on => :create # the :on => :create is optional
该问题将被提出,@category.save
因此您可以像这样设置您的 Flash 通知:
if @category.save
# success
else
# set flash information
end