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

时间:2009-07-28 14:07:13

标签: ruby-on-rails ruby

当我渲染:在rails中的xml我总是想要:dasherize =>错误的选择。有没有办法将应用程序范围设置为默认值,当然不必修改rails源代码?

也许是一个渲染函数,它以某种方式优先于第一个,然后用这个选项调用它......

2 个答案:

答案 0 :(得分:5)

做这样的事情确实有可能导致意外行为的缺点当别人来看你的代码时(即直到他们发现你的被覆盖的方法,他们可能想知道为什么它表现得像dasherize false,如果还没有明确指定。)也就是说,在ApplicationController或您的某个特定控制器中,您可以覆盖render方法。

e.g。类似的东西:

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)

答案 1 :(得分:3)

您也可以尝试这样的解决方案:

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

您可以将其放入应用程序控制器(因此所有控制器将受到影响)或仅在特定控制器中。