2010-07-15 98 views
0

我不能做這樣的:Ruby類聲明的問題

class Hardware 

before_filter 

    def before_filter 
    puts "ge" 
    end 

end 

它說的before_filter是未定義的方法或變量時,我將它實例化

hd = Hardware.new 

,因爲我見過別人把方法名在上課前。只是想知道它是如何工作的。謝謝

回答

7

有兩個問題與您的代碼:

  1. 要調用方法,但是你要定義一個實例方法。
  2. 您在之前調用了方法它已被定義。

這兩個顯然不能工作。

這會工作:

class Hardware 
    def self.before_filter 
    puts "ge" 
    end 

    before_filter 
end 
+0

只是爲了澄清:'before_filter'會被調用更多或只要它是隻讀少,不像然後再閱讀一切其他語言執行代碼。這種事情也意味着你不能寫一個類,然後編寫你想包含的模塊。 – 2010-07-16 00:31:05

5

before_filter是ActiveRecord類方法(請參閱here),所以只有在您的模型繼承自ActiveRecord::Base(或子類)時纔可用。你能更具體地說明你想做什麼嗎?

你可能只是在尋找:

class Hardware 
    def initialize 
    super 
    before_filter 
    end 

    protected 
    def before_filter 
    # ... 
    end 
end 
3

要麼改變

def before_filter 

def self.before_filter 

,並把它定義後

OR

評論before_filter

class Hardware 
    def before_filter 
    puts "ge" 
    end 
end 

和呼叫像

hd = Hardware.new 
hd.before_filter