Rails 3:在validates语句中找不到类方法

时间:2013-04-25 21:20:58

标签: ruby-on-rails ruby-on-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。但是,如果我只是在Attribute.ANNOTATION方法中引用AttrCorrectValidator.validate_each,那就可以了。

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

1 个答案:

答案 0 :(得分:1)

名称冲突。完整的消息是

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

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

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