2010-06-28 90 views
2

嘗試使用add_to_base添加錯誤消息時,出現未定義的方法「錯誤」消息。我在我的模型中定義它。我是否應該包含任何其他文件以訪問錯誤變量。Rails驗證錯誤

模型文件 - 我定義它的方法內部

self.errors.add_to_base("Invalid Name") 

錯誤消息

undefined method `errors' for #<Class:0x0000010179d7a0> 

我試圖通過調用它作爲errors.add_to_base("Invalid Name")還,但仍得到相同的錯誤。

謝謝。

+2

請包括更多的模型代碼。錯誤消息表明* self *指向類* Class *的一個實例,而不是您的模型類的一個實例。 – 2010-06-28 06:57:49

+0

請張貼您的模型文件。 – Dex 2010-06-28 06:59:37

回答

4

你應該把它在你的回調方法,像下面

def validate 
    if !self.interests.blank? && !self.interests.match("<").nil? 
     self.errors.add :base, 'Please ensure that Interest field do not contain HTML(<and>) tags' 
    end 
    end 
+0

這是很多自我(自我?),都可以省略。 – 2010-06-28 07:03:09

1

我懷疑你定義了你的方法一類的方法,而不是作爲一個實例方法。

類方法是這樣的紅寶石:

def self.checkFoo() 
    ... 
end 

實例方法是這樣的:

def checkFoo() 
    ... 
end 

檢查您的checkFoo方法是一個實例方法,然後使用它像這樣:

class MyModel < ActiveRecord::Base 
    validate :foo 

    private 
    def checkFoo() 
    self.errors.add etc.. 
    end 
end 
0

通常使用驗證回調,模型錯誤都用於導致t他預期的數據庫保存失敗併爲最終用戶設置上下文錯誤消息。 add_to_base變體用於一般的,非特定的錯誤條件(即,不與特定的模型屬性關聯)。

class MyModel < ActiveRecord::Base 
    validate do |my_model| 
    if my_model.some_attribute.blank? # For example 
     my_model.errors.add :my_model, "must be filled in" 
    end 
    end 
end 

隨後

@my_model = MyModel.create(:some_attribute => "") 

將失敗,並且@ my_model.errors.full_messages陣列將包含

[ ..., "Some_attribute must be filled in", ... ] 

然而,有用於上述示例的簡寫如下

class MyModel < ActiveRecord::Base 
    validates_presence_of :some_attribute, :msg => "must be filled in" 
end 
0

搭配喜歡你 'self.errors.add_to_base( 「無效的名稱」)' 沒有任何問題

但是你的模型應該從繼承的ActiveRecord :: Base的

歡呼

sameera