2010-09-29 145 views
1

我試圖用Rails 2.3.5創建我的車型之一自定義驗證,但我一直recieving以下錯誤每次我跑我的測試套件:PAGINATE拋出錯誤自定義驗證

`method_missing_without_paginate': undefined local variable or method `validates_progression' 

應用程序/模型/ project.rb似乎

class Project < ActiveRecord::Base 
    ... 
    validates_progression 

    def validates_progression 
     true # stubtastic! 
    end 
end 

我不能做太多的這種〜

回答

1

它不工作,因爲要定義實例範圍內的方法和你想叫它中類範圍。你有兩個選擇:

實例範圍內

class Project < ActiveRecord::Base 

    validate :validates_progression 

    def validates_progression 
    true # stub 
    end 

end 

類範圍

class Project < ActiveRecord::Base 

    def self.validates_progression 
    true # stub 
    end 

    # Be sure to define this method before calling it 
    validates_progression 

end 

第二種方案並沒有真正有意義,除非你想換一個其他的過濾器。

class Project < ActiveRecord::Base 

    def self.validates_progression 
    validates_presence_of :progression 
    validates_length_of ... 
    end 

    # Be sure to define this method before calling it 
    validates_progression 

end 

否則,請使用第一個解決方案。

1

分頁參考是一個紅色的鯡魚。線索是'沒有'。該分頁寶石將現有的method_missing方法重名並將其稱爲method_missing_without_pagination。所以,這個問題是一個標準的缺失方法錯誤。

該方法缺失,因爲它是a)當你調用它時沒有定義,b)沒有在正確的範圍內(你試圖在類的範圍內調用一個實例方法)。

validate :validates_progression 

def validates_progression 
    true 
end 

您可以通過使用validate與您的驗證方法的符號添加自定義的驗證