これを行うには複数の方法があります。
あなたにとって最も簡単な解決策:
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
次のようにフラッシュ通知を設定できるように発生します。
if @category.save
# success
else
# set flash information
end