2010-02-04 86 views
1

我有幾個關於驗證的問題,我無法弄清楚該怎麼做。任何幫助表示讚賞。驗證字段,驗證相關模型以及順序或錯誤消息

當他們顯示在頁面上時,我似乎無法控制錯誤消息的順序。

我有validates_associated屬性,它確實驗證了單個字段,但它也添加了一個說「型號名稱無效」的行。我不想要那個錯誤信息,因爲它已經顯示了所有正確的錯誤信息。

class Recipe < ActiveRecord::Base 
    has_many :recipe_steps 
    has_many :recipe_ingredients 

    validates_presence_of :title, :message => "cannot be left blank" 
    validates_presence_of :servingsize, :message => "cannot be left blank" 
    validates_presence_of :cookingtime, :message => "cannot be left blank" 
    validates_numericality_of :cuisine_type_id, :greater_than => 0, :message => "Please select a cuisine type" 
    validates_numericality_of :recipe_level_id, :greater_than => 0, :message => "Please select a recipe level" 
    validates_associated :recipe_ingredients 
    validates_associated :recipe_steps 

    HUMAN_ATTRIBUTES = { 
    :title => "Recipe title", 
    :servingsize => "Serving size", 
    :cookingtime => "Cooking time", 
    :cuisine_type_id => "", 
    :recipe_level_id => "" 
    } 

    def self.human_attribute_name(attr) 
    HUMAN_ATTRIBUTES[attr.to_sym] || super 
    end 
end 

我找不到任何好的文檔或教程,如果你可以分享一些很棒的鏈接。

感謝

回答

1

這可能不會完全回答你的帖子,但是當你想要一個非常具體的驗證程序時,它通常很方便地簡單地覆蓋驗證函數。

例如,如果您知道它們將其完全留空,以免它們留下空白並且不是6個字符在長度。

例如:

def validate 

    if self.thing.empty? 
    errors.add_to_base "Please make sure you do this thing!" 
    end 

    if self.other_thing.length < 4 
    errors.add 'other_thing', 'must be 4 characters long minimum' 
    else 
     self.other_thing.include? 'naughty word' 
     errors.add 'other_thing', 'can not include naughty words' 
     end 
    end 
end 
+0

我在想我做錯了什麼,但你有一些好點。謝謝。 – iJK 2010-02-04 19:14:45

2

您應該使用Rails I18n配置自定義錯誤消息。

+0

好的,我會閱讀它。謝謝 – iJK 2010-02-04 19:18:04

0

我是用鋼軌v2.3.4在錯誤集合不使用orderedlist。一旦升級到2.3.5,錯誤集合將使用排序列表,因此錯誤消息將按照它們在模型中聲明的順序顯示。