2011-11-17 57 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文件

消息,我可以看到一個參數在控制器把更多的一般故障的消息。

相關問題