2017-04-15 76 views
3

我指的是您在app/helpers中創建的模塊。它們是否可用於:哪裏有Rails助手可用?

  • Views?
  • 控制器?
  • 模型?
  • 測試?
  • 其他文件?
  • 有時候?
  • 所有的時間?
+0

第一個塊回答你的問題,我相信,http://api.rubyonrails.org/classes/ActionController/Helpers.html –

+0

文檔沒有提到視圖和控制器以外的任何東西。另外,我是Ruby/Rails的新手,我不明白這隻能通過'#helpers'訪問。 –

回答

7

在Rails 5中,所有的視圖和所有控制器都可以使用所有的幫助器,除此之外別無其他。

http://api.rubyonrails.org/classes/ActionController/Helpers.html

這些幫手都可以在默認情況下所有模板。

默認情況下,每個控制器將包含所有助手。

在視圖中可以直接訪問助手:

module UserHelper 
    def fullname(user) 
    ... 
    end 
end 

# app/views/items/show.html.erb 
... 
User: <%= fullname(@user) %> 
... 

在控制器你需要的#helpers方法來訪問它們:

# app/controllers/items_controller.rb 
class ItemsController 
    def show 
    ... 
    @user_fullname = helpers.fullname(@user) 
    ... 
    end 
end 

您仍然可以在其他類使用的輔助模塊通過include他們。

# some/other/klass.rb 
class Klass 
    include UserHelper 
end 

舊的行爲是所有的助手都包含在所有視圖中,並且每個助手都包含在匹配控制器中,例如。 UserHelper只會包含在UserController中。

要恢復到此行爲,您可以在config/application.rb文件中設置config.action_controller.include_all_helpers = false

+0

在像Presenters/Decorators這樣的其他類中包含助手時,一個主要的問題是大多數視圖助手依賴於視圖上下文。您需要從view(self)或通過調用控制器中的'view_context'並將它作爲構造函數依賴項或參數傳遞來獲取視圖上下文。 – max