【发布时间】:2017-04-15 22:37:45
【问题描述】:
我指的是您在app/helpers 中创建的模块。它们是否适用于:
- 观看次数?
- 控制器?
- 型号?
- 测试?
- 其他文件?
- 有时?
- 一直?
【问题讨论】:
-
文档没有提到视图和控制器以外的任何内容。另外,我是 Ruby/Rails 的新手,我不明白只能通过
#helpers访问是什么意思。
标签: ruby-on-rails ruby-on-rails-5
我指的是您在app/helpers 中创建的模块。它们是否适用于:
【问题讨论】:
#helpers 访问是什么意思。
标签: ruby-on-rails ruby-on-rails-5
在 Rails 5 中,所有 Helper 都可用于所有 Views 和所有 Controllers,而不是其他任何东西。
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
您仍然可以通过includeing 来使用其他类中的帮助模块。
# some/other/klass.rb
class Klass
include UserHelper
end
旧的行为是所有视图都包含所有助手,并且只有每个助手都包含在匹配的控制器中,例如。 UserHelper 只会包含在 UserController 中。
要返回此行为,您可以在 config/application.rb 文件中设置 config.action_controller.include_all_helpers = false。
【讨论】:
view_context 并将其作为构造函数依赖项或参数传递来获取视图上下文。