跳至内容 跳至搜索

Action Controller 助手

Rails 框架提供了大量助手,用于处理资产、日期、表单、数字和模型对象等。默认情况下,所有模板都可以使用这些助手。

除了使用提供的标准模板助手之外,还强烈建议创建自定义助手来提取复杂的逻辑或可重用的功能。默认情况下,每个控制器都会包含所有助手。这些助手只能通过控制器中的 #helpers 访问。

在 Rails 的早期版本中,控制器将包含一个与控制器名称匹配的助手,例如,MyController 将自动包含 MyHelper。您可以使用以下方法恢复旧的行为

# config/application.rb
class Application < Rails::Application
  config.action_controller.include_all_helpers = false
end

可以使用 ActionController::Base 或任何继承自它的控制器中的 helper 类方法指定其他助手。

可以将 Time 类中的 to_s 方法包装在助手方法中,以便在 Time 对象为空时显示自定义消息

module FormattedTimeHelper
  def format_time(time, format=:long, blank_message="&nbsp;")
    time.blank? ? blank_message : time.to_fs(format)
  end
end

现在可以使用 helper 类方法将 FormattedTimeHelper 包含在控制器中

class EventsController < ActionController::Base
  helper FormattedTimeHelper
  def index
    @events = Event.all
  end
end

然后,在 EventsController 渲染的任何视图中,都可以调用 format_time 方法

<% @events.each do |event| -%>
  <p>
    <%= format_time(event.time, :short, "N/A") %> | <%= event.name %>
  </p>
<% end -%>

最后,假设我们有两个事件实例,一个有时间,一个没有时间,输出可能如下所示

23 Aug 11:30 | Carolina Railhawks Soccer Match
N/A | Carolina Railhawks Training Workshop
命名空间
方法
H
包含的模块

属性

[RW] helpers_path

实例公共方法

helpers()

提供一个代理,用于从视图外部访问辅助方法。

# File actionpack/lib/action_controller/metal/helpers.rb, line 117
def helpers
  @_helper_proxy ||= view_context
end