簡體   English   中英

在Rails中調用輔助方法時是否有理由不包含模塊名稱?

[英]Is there ever a reason NOT to include the module name when calling a helper method in 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中使用輔助方法的最佳實踐,或者有時候有理由不這樣做?

Rails慣例決定了前者 ,而不是后者。 應該通過調用描述性方法名稱來避免命名沖突 - 也就是說, truncate_name優於truncate (只要它是被截斷的名稱) - 而不是通過模塊名稱命名空間。

如果你仍然處於虧損狀態,請考慮Rails核心的作用:使用form_for 而不是 FormHelper.form_for調用FormHelper類的 form_for函數。 這種約定適用於絕大多數Rails輔助函數。

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

基本上,如果您嚴格遵守Rails DRY原則,那么您需要將輔助方法名稱提煉為最優雅的形式。 如果是這種情況,最好只調用concatenate_names(['Alvin', 'Simon', 'Theodore']) ,而不是創建一個新的NamesHelper模塊並調用NamesHelper.concatenate(['A', 'S', 'T'])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM