2014-05-13 200 views
0

我寫了一個小幫手方法在我的ApplicationController是這樣的:訪問自定義幫助

helper_method :dehumanize 
def dehumanize (string) 
    string.parameterize.underscore 
end 

現在,我想在我的模型文件一個使用它,但它似乎沒有可用那裏。

我也試圖與:

ApplicationController.dehumanize(title) 
模型

,但它不工作。

如何使它在那裏工作的任何線索?

感謝,

回答

4

模型一般不能/不/不應該訪問控制器方法(MVC慣例),但你寫不控制器必然屬於反正方法 - 它將會更好地作爲字符串類的擴展。

我建議你寫一個初始化加dehumanizeString

\config\initializers\string_dehumanize.rb 

class String 
    def dehumanize 
    self.parameterize.underscore 
    end 
end 

您將需要重新啓動服務器/控制檯,但那麼你就可以在任何字符串調用.dehumanize

some model: 
def some_method 
    string1 = 'testing_the_method' 
    string1.dehumanize 
end 
+0

+1想出來的盒子 –

0

Matt的答案是完全正確的,但爲了給你一些澄清,你想確保你打電話給你的方法objects/instances,而不是cla的SSE自己

例如,你提到你嘗試過這樣的:

ApplicationController.dehumanize(title) 

這不會有任何效果,因爲它調用上未初始化的類中的方法,更何況類沒有這個方法。基本上,如果你稱這種方法,你會期望什麼?

做到這一點的方法是使用的方法Matt推薦,或使用你的模型本身就是一個類的方法,這將允許您調用模型的直接方法:

#app/models/model.rb 
class Model < ActiveRecord::Base 
    def self.dehumanize string 
     string.parameterize.underscore 
    end 
end 

# -> Model.dehumanize title