0

我在 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}

当我运行测试时,我得到一个 NoMethodError for Attribute.ANNOTATION. Attribute.ANNOTATION但是,如果我只是在方法中提到AttrCorrectValidator.validate_each它,它就可以正常工作。

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

4

1 回答 1

1

名称冲突。完整的消息是

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

所以你正在定义一个类,但 Ruby 正在寻找另一个同名的类,它没有定义 ANNOTATION。

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

于 2013-04-25T22:11:59.917 回答