2014-01-11 42 views
0

當與Rails的輔助方法的工作,有可能在一個輔助文件中創建一個方法,然後調用視圖的方法,而不參照輔助模塊:在Rails中調用幫助器方法時,是否有任何理由不包含模塊名稱?

// application_helper.rb 
module ApplicationHelper 

    def foobar 
     return "foo" 
    end 

end 

// index.html.erb 
<%= foobar %> 

但是,如果你想避免命名衝突,你也可以配合輔助模塊,你調用的方法的名稱,如:

// application_helper.rb 
module ApplicationHelper 

    def self.foobar 
     return "foo" 
    end 

end 

// index.html.erb 
<%= ApplicationHelper.foobar %> 

我說得對不對的思維總是做第二個方法是使用一個輔助方法的最佳實踐Rails,或者有沒有理由不這樣做?

回答

2

Rails convention dictates the former,而不是後者。命名衝突應通過調用描述性方法名稱來避免 - 即truncate_nametruncate(只要它是一個正在被截斷的名稱)更好 - 而不是通過模塊名稱的命名空間。

如果你仍然在虧損,考慮一下Rails核心的作用:FormHelper class'sform_for功能是使用form_forFormHelper.form_for調用。這個約定適用於絕大多數Rails幫助函數。

另一個考慮:當使用Rails的默認生成器時,默認情況下會爲每個生成的資源創建一個助手。通常的做法是定義特定於該資源的指定幫助程序文件中的資源的任何幫助函數。相反,應用程序中可用的幫助函數應在application_helper.rb中定義,而不是在特定於資源的幫助程序中定義。

基本上,如果你嚴格遵守Rails DRY原則,你會想要將你的幫助器方法名稱提煉爲最優雅的形式。如果是這樣的話,最好簡單地調用concatenate_names(['Alvin', 'Simon', 'Theodore']),而不是創建一個新的NamesHelper模塊並調用NamesHelper.concatenate(['A', 'S', 'T'])

相關問題