2013-04-25 84 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