跳至內容 跳至搜尋

Action Controller Helpers

Rails 框架提供許多協助處理資產、日期、表單、數字和模型物件的 Helper,種類繁多。這些 Helper 預設可供所有範本使用。

除了使用提供的標準範本 Helper 外,強烈建議建立自訂 Helper 來萃取出複雜的邏輯或可重複使用的功能。預設情況下,每個控制器都會包含所有 Helper。這些 Helper 只可透過 #helpers 在控制器中存取

Rails 的先前版本中,控制器會包含與控制器名稱相符的 Helper,例如:MyController 會自動包含 MyHelper。您可以使用以下方式回復為舊有行為

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

可以使用 ActionController::Base 或繼承自該類別的任何控制器的 helper 類別方法指定其他 Helper。

來自 Time 類別的 to_s 方法,可包覆在一個 Helper 方法中,以在 Time 物件為空時顯示自訂訊息

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

FormattedTimeHelper 現在可以使用 helper 類別方法包含在控制器中

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()

提供一個代理程式以便從檢視外存取 Helper 方法。

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