2013-04-25 62 views
0

我有下面的类在Rails 3应用程序:的Rails 3:类方法中找不到的验证声明

class Attribute 
    ... 
    def self.ANNOTATION 
    self.find_by_table_name('annotations') 
    end 
    ... 
end 

在另一类,我指的是这个方法在validates电话:

validates :attribute_type_id, :attr_correct => {attr: Attribute.ANNOTATION} 

当我运行我的测试时,出现Attribute.ANNOTATION的NoMethodError。但是,如果我在AttrCorrectValidator.validate_each方法中只提及Attribute.ANNOTATION,它就可以正常工作。

为什么我的班级方法不能在validates声明中识别?它可能与Ruby/Rails如何评估类声明有关吗?

回答

1

名称冲突。完整的消息是

undefined method `ANNOTATION' for ActiveRecord::AttributeMethods::Serialization::Attribute:Class 

所以你定义一个类,但红宝石是找到另一个同名,注释中定义它没有。

可能的修复:完全符合每个有问题的用途(即::Attribute.ANNOTATION)或重命名类。

+0

应该知道。谢谢!另外,我还没有看过完全合格的语法。在'::'之前是否存在一个隐含的类,比如'Object :: Attribute.ANNOTATION',或者这是它自己的东西? – abeger 2013-04-29 15:39:02

+1

'::'当用作一元运算符时,将使用全局(匿名)名称空间解析为操作数。 – 2013-04-29 17:43:42

+0

很高兴知道!再次感谢! – abeger 2013-04-29 20:12:44