代码之家  ›  专栏  ›  技术社区  ›  luca

“patch”rails渲染功能用于编辑默认选项

  •  4
  • luca  · 技术社区  · 16 年前

    在rails中呈现:xml时,我始终需要:dasherize=>false选项。有没有一种方法可以将IT应用程序范围设置为默认值,而不必修改Rails源代码?

    可能是一个呈现函数,它以某种方式优先于第一个函数,然后用这个选项调用它…

    2 回复  |  直到 16 年前
        1
  •  5
  •   mikej heading_to_tahiti    16 年前

    这样做的缺点是,当其他人来看你的代码时(也就是说,在他们发现你的重写方法之前,他们可能会想,为什么它的行为像dasherize-false,如果没有明确指定的话。)也就是说,在applicationcontroller或你的某个特定控件中您可以覆盖渲染方法。

    例如:

    class MyController < ApplicationController
      def render(options = nil, extra_options = {}, &block)
        options ||= {} # initialise to empty hash if no options specified
        options = options.merge(:dasherize => false) if options[:xml]
        super(options, extra_options, &block)
      end
    end
    

    如果您想让dasherize在您的调用中仍然是可重写的,您可以在另一个方向进行哈希合并,例如。

    options = {:dasherize => false}.merge(options)
    
        2
  •  3
  •   Vlad Zloteanu    16 年前

    你也可以尝试这样的解决方法:

    alias_method_chain :render, :no_dasherize
    
    def render_with_no_dasherize(options = nil, extra_options = {}, &block)
      new_options = options
      new_options = {:dasherize=>false}.merge(options) if(options[:xml])
      render_without_no_dasherize(new_options, extra_options, &block)
    end
    

    你可以把它放在应用程序控制器中(所以 全部的 控制器将受到保护)或仅在特定控制器中。