2017-04-15 81 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