2013-04-29 141 views
0

我基本上試圖做的是創建一個自定義驗證,該自定義驗證使用特定選項調用RoR默認驗證,以嘗試和減少樣板(並驗證所有模型全局使用此驗證)在自定義驗證中使用默認驗證程序

上做RoR中某一個領域的自定義校驗的方式是使用validates_each方法,像這樣

class SelectBooleanValidator < ActiveModel::EachValidator 

    def validate_each(record,attr,value) 
    #do validation here 
    end 

end 

我所試圖做的是調用validator_each內包含驗證方法,所以select_boolean驗證(我正在實現)只使用:包含驗證器和某些選項,也就是我想要做這樣的事情(注意,此代碼不實際工作,但下面的是什麼,我基本上是試圖做)

class SelectBooleanValidator < ActiveModel::EachValidator 
    include ActiveModel::Validations 
    def validate_each(record,attr,value) 
    validates_with InclusionValidator, record,attr,value, {:in => [true, false],:message=>'can\'t be blank'} 
    end 
end 

然後,我會(我的模型裏)只是做這

validates :awesome_field, select_boolean:true 

而不必做這一切的時候

validates :awesome_field, :inclusion => {:in => [true, false], message: 'can\'t be blank'} 

回答

1
class SelectBooleanValidator < ActiveModel::Validations::InclusionValidator 
    def options 
    super.merge(:in => [true, false], message: 'can\'t be blank') 
    end 
end 
+0

感謝堆,這工作得很好! – mdedetrich 2013-04-30 00:41:23