我在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。但是,如果我只是在Attribute.ANNOTATION
方法中引用AttrCorrectValidator.validate_each
,那就可以了。
为什么我的类方法不会在validates
语句中被识别?它可能与Ruby / Rails如何评估类声明有关吗?
答案 0 :(得分:1)
名称冲突。完整的消息是
undefined method `ANNOTATION' for ActiveRecord::AttributeMethods::Serialization::Attribute:Class
所以你要定义一个类,但Ruby正在寻找另一个同名的,没有定义ANNOTATION。
可能的修复:完全符合每个有问题的用法(即::Attribute.ANNOTATION
)或重命名该类。