2012-08-23 35 views
0

我的模型,Widget.rb,有include ApplicationHelper和我的實例方法有使用application_helper.rbrails 3:在一個類方法self.do_something()我如何訪問一個ApplicationHelper方法?

然而定義的任何方法沒有問題,當我嘗試使用的輔助方法之一,我的任何類的方法,如

def self.send_broadcast(guid) 
    track_guids(guid) # defined in application_helper.rb 
end 

我得到No方法錯誤。

是否有一些祕密握手允許在類方法內使用ApplicationHelper方法?

回答

2

ApplicationHelper只是一個模塊:

module ApplicationHelper 
    def track_guids(something) 

    end 
end 

class Widget 
    extend ApplicationHelper 

    def self.send_broadcast(guid) 
    track_guids(guid) 
    end 
end 

現在你應該有機會從一個類方法的模塊的方法。我不確定你是否可以擴展幷包含相同的模塊,儘管......不知道該做什麼。

編輯補充:

我不知道,如果你嘗試兩個延伸,並具備相同的模塊插入類會發生什麼。通過extend,您可以獲得包含在課程級別的模塊,其中include包含在實例級別。如果你們兩個都這麼做,它可能會給你們提供課堂和實例的方法,或者它可能會死得很厲害。試一試?

+0

真棒,謝謝,非常有用的迴應。順便說一句,我既包括和擴展,它SEEMS工作正常。 – jpwynn

+0

fwiw發現這篇文章http://railstips.org/blog/archives/2009/05/15/include-vs-extend-in-ruby/ – jpwynn

-1

我不認爲你可以訪問實例方法,除非self是一個實例。您可以創建一個Widget的實例並從中調用一個類方法,或者您可以嘗試直接從該模塊調用方法。

+0

作爲現在的解決方法,我只是將類方法轉換爲實例方法,然後使用虛擬實例調用(前類方法)方法,但是是。 – jpwynn

相關問題