命名空間
方法
常數
RENDERERS | = | Set.new |
包含應對可用渲染器過程的渲染器名稱之設定。預設值為: |
類別公用方法
_render_with_renderer_method_name(key) 連結
原始碼: 顯示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/renderers.rb, line 89 def self._render_with_renderer_method_name(key) "_render_with_renderer_#{key}" end
add(key, &block) 連結
加入一個新的渲染器在控制器動作中呼叫。藉由將其名稱作為選項傳遞給 AbstractController::Rendering#render
來呼叫渲染器。若要建立渲染器,請傳遞一個名稱和一個區塊給它。該區塊採用兩個引數,第一個是與其鍵配對的值,第二個是傳遞给 render
的其他選項雜湊。
建立一個 csv 渲染器
ActionController::Renderers.add :csv do |obj, options|
filename = options[:filename] || 'data'
str = obj.respond_to?(:to_csv) ? obj.to_csv : obj.to_s
send_data str, type: Mime[:csv],
disposition: "attachment; filename=#{filename}.csv"
end
請注意,由於 csv mime 類型隨附 Rails
,因此我們使用了 Mime。對於自訂渲染器,您需要使用 Mime::Type.register
註冊一個 mime 類型。
在控制器動作中使用 csv 渲染器
def show
@csvable = Csvable.find(params[:id])
respond_to do |format|
format.html
format.csv { render csv: @csvable, filename: @csvable.name }
end
end
原始碼: 顯示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/renderers.rb, line 73 def self.add(key, &block) define_method(_render_with_renderer_method_name(key), &block) RENDERERS << key.to_sym end
remove(key) 連結
這個方法與 add 方法相反。
移除一個 csv 渲染器
ActionController::Renderers.remove(:csv)
原始碼: 顯示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/renderers.rb, line 83 def self.remove(key) RENDERERS.delete(key.to_sym) method_name = _render_with_renderer_method_name(key) remove_possible_method(method_name) end
執行個體公用方法
_render_to_body_with_renderer(options) 連結
原始碼: 顯示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/renderers.rb, line 143 def _render_to_body_with_renderer(options) _renderers.each do |name| if options.key?(name) _process_options(options) method_name = Renderers._render_with_renderer_method_name(name) return send(method_name, options.delete(name), options) end end nil end
render_to_body(options) 連結
由 AbstractController::Rendering
中的 render
呼叫,並將回傳值設定為 response_body
。
如果找不到渲染器,super
會將控制權傳回給 ActionView::Rendering.render_to_body
(如果存在的話)。
來源:顯示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/renderers.rb, line 139 def render_to_body(options) _render_to_body_with_renderer(options) || super end