【问题标题】:Where are Rails helpers available?Rails 助手在哪里可用?
【发布时间】:2017-04-15 22:37:45
【问题描述】:

我指的是您在app/helpers 中创建的模块。它们是否适用于:

  • 观看次数?
  • 控制器?
  • 型号?
  • 测试?
  • 其他文件?
  • 有时?
  • 一直?

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

在 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。

【讨论】:

  • 在其他类型的类(如 Presenters/Decorators)中包含助手时的一个主要问题是,大多数视图助手都依赖于视图上下文。您需要从视图(自身)或通过从控制器调用 view_context 并将其作为构造函数依赖项或参数传递来获取视图上下文。
猜你喜欢
  • 1970-01-01
  • 2016-07-23
  • 2015-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2010-09-08
  • 1970-01-01
  • 2015-12-20
相关资源
最近更新 更多