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

那可能吗?或者有没有更好的方法来组合验证以使代码干燥?

4

1 回答 1

0

您可以使用自定义验证方法执行此操作:http: //edgeguides.rubyonrails.org/active_record_validations.html#performing-custom-validations Rails 自定义验证

于 2013-11-11T05:00:27.833 回答