私は Rails 3 を開発しており、同じ名前に対して複数の検証を行っています。重複検証と条件付きを組み合わせたい。私はそれが間違っているのか、それとも可能であるのかさえわかりません。
私のモデルで(オリジナル)
class MyModel < ActiveRecord::Base
validates :exchange_rate, :presence => true,
:numericality => { :greater_than => 0 },
:unless => :is_using_default_currency?
validates :exchange_rate, :numericality => { :equal_to => 1 },
:if => :is_using_default_currency?
private
def is_using_default_currency?
value == 1
end
end
私はこのようなことをしたい
私のモデルで
validates :exchange_rate, :presence => true, :exchange_rate => true
カスタムバリデータクラスで
class ExchangeRateValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
@record = record
if is_using_default_currency?
validates :exchange_rate, :presence => true,
:numericality => { :greater_than => 0 }
else
validates :exchange_rate, :numericality => { :equal_to => 1 }
end
end
private
def is_using_default_currency?
@record.value == 1
end
end
それは可能ですか?または、検証を組み合わせてコードを DRY にするより良い方法はありますか?