2009-08-03 66 views
6

如何在rails中动态配置验证? 例如,如果我有Rails动态验证

validates_length_of :name, within => dynamic 

变量“动态”将由用户设定。保存时,验证应使用变量“dynamic”的值来配置内部配置。

+0

你应该看看[用procs定义动态验证](http://stackoverflow.com/a/9961015/1287376)。 – 2016-06-03 20:31:36

回答

13

我不相信validates_length_of支持动态参数。您需要在自定义验证中复制行为。

# in model 
def validate 
    unless (5..10).member? name.length 
    errors.add :name, "must be within 5 to 10 characters" 
    end 
end 

它使用一个静态范围,但您可以轻松使用自己的自定义范围变量。

def validate 
    unless some_range.member? name.length 
    errors.add :name, "must be within #{some_range.first} to #{some_range.last} characters" 
    end 
end 

你可能想在我Everyday Active Record series看看我Railscasts episode on conditional validations和第3集。

+0

感谢您的回答。我需要像validates_presence_of这样的动态变量:validates_presence_of:name,:locales => dynamic_array(:locales可以是[:en,:de,...] dynamic)。配置:locales by validates_presence_of附带i18n_multi_locales_validations插件。 – phlegx 2009-08-03 17:08:10