rails组合重复验证

时间:2013-11-11 04:23:35

标签: ruby-on-rails validation

我正在开发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?

1 个答案:

答案 0 :(得分:0)