2011-11-17 61 views
1

我看到模型中使用自定义验证器(好),但我也看到验证器本身添加到记录错误对象。
例如我看到 (例如改变)rails自定义验证器 - 添加到模型或控制器中的错误?

class Title < ActiveRecord::Base 
    # implement the method called during validation 
    def validate_each(record, attribute, value) 
    record.errors[attribute] << 'must be Mr/Mrs/Dr.' unless ['Mr.', 'Mrs.', 'Dr.'].include?(value) 
    end 
end 

这感觉有点像应该在控制器中正在做的和验证应该只是返回true/false但也许不是一个国家的事情。

+0

如果你有一个'has_many'关系,你想限制为一个,为什么不用'has_one'来代替? – Frost

+0

我相信这是代码从另一个问题复制@迈克尔回答:http://stackoverflow.com/questions/8169589/rails-3-1-limit-the-number-of-child-models –

+0

彻底改变了这个例子: ) –

回答

2

我倾向于这种模式:

errors.add[:name] << :invalid_honorific 

当由模型设置错误是符号(作用更像一个错误码),然后通过视图层,无论的.yml文件处理。这样可以避免在模型中放置太多表示层的东西。

2

我认为这将是一个案件的事情。一般来说,验证消息在控制器中根本不会发生。当你使用一个罐头验证器时,你可以通过操纵.yml文件来以不同的方式指定消息,并且这样做可以在模型下调整内容并添加值,而不是控制器。

其实我会建议始终把那些自进入语言环境.yml文件

消息,我可以看到一个参数在控制器把更多的一般故障的消息。

相关问题