2012-09-19 102 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的值。如果不是,那就是你的问题。