命名空间
方法
- A
- R
常量
| RENDERERS | = | Set.new |
一个包含渲染器名称的 Set,这些名称对应可用的渲染器 proc。默认值为 |
||
类公共方法
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
请注意,我们使用了 Mime 作为 csv 的 mime 类型,因为它随 Rails 一起提供。对于自定义渲染器,您需要使用 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 88 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 98 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(options) 链接
由 AbstractController::Rendering 中的 render 调用,该方法将返回值设置为 response_body。
如果找不到渲染器,super 会将控制权交还给 ActionView::Rendering.render_to_body(如果存在)。
来源: 显示 | 在 GitHub 上
# File actionpack/lib/action_controller/metal/renderers.rb, line 154 def render_to_body(options) _render_to_body_with_renderer(options) || super end