2012-09-19 103 views
0

我有一個模型的自定義驗證,我得到未定義的方法,這是沒有任何意義的。規範未定義的方法`parameterize'

下面的代碼

validate :unique_seo_url_from_title 

def unique_seo_url_from_title 
    url = "#{title.parameterize}-#{region.parameterize}-#{country}" 
    errors.add(:title, "already in use") if SeoMapping.find_by_seo_url(url) 
    end 

奇怪的是,如果我輸出的URL,即提高URL它打印它完美所以它的工作。

希望有人能建議!

+0

都是'title'和'region'字符串嗎?什麼是你得到的完整的錯誤信息(通常它說*未定義的方法... ...)。你在哪裏把'raise url'放在哪裏? – khustochka

+0

是的。錯誤是:未定義的方法'parameterize'爲nil:NilClass和如果我在URL和errors.add之間引發。 – Lee

+0

對不起,它仍然不清楚在失敗時調用哪個對象參數。你最好調試一下。 'find_by_seo_url'是Rails動態查找器還是您自己的方法? – khustochka

回答

0

由於您沒有將參數傳遞給函數,因此標題,地區和國家似乎是使用驗證的模型的屬性。因此,使用自我爲對象

驗證:unique_seo_url_from_title

def unique_seo_url_from_title 
    url = "#{self.title.parameterize}-#{self.region.parameterize}-#{self.country}" 
    errors.add(:title, "already in use") if SeoMapping.find_by_seo_url(url) 
    end 

感謝

+0

我已經嘗試過自我,但仍然是相同的錯誤消息。我應該在線上說。 – Lee

+0

你可以給整個模型。還有什麼是標題,地區和國家,因爲它沒有在任何地方定義。 –

0
undefined method `parameterize' for nil:NilClass 

該消息意味着正是它說。你有一個對象,它是nil,你打電話parameterize - 它失敗,因爲該方法定義String,而不是NilClass

檢查是否存在titleregion的值。如果不是,那就是你的問題。