0

私は 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 にするより良い方法はありますか?

4

1 に答える 1

0

カスタム検証メソッドでこれを行うことができます: http://edgeguides.rubyonrails.org/active_record_validations.html#performing-custom-validations Rails カスタム検証

于 2013-11-11T05:00:27.833 に答える