Ruby on rails 如何绕过默认的url选项?

Ruby on rails 如何绕过默认的url选项?,ruby-on-rails,ruby-on-rails-3,params,Ruby On Rails,Ruby On Rails 3,Params,在我的上一个Rails项目中,我必须覆盖application\u controller.rb中的default\u url\u选项,以便始终在每个请求中传递一个参数,如下所示: def default_url_options { :my_default_param => my_param_value } end 现在,每个url帮助器在每个生成的url末尾附加一个my_default_参数。 例如,user\u url(@current\u user)生成如下url: htt

在我的上一个Rails项目中,我必须覆盖
application\u controller.rb中的
default\u url\u选项
,以便始终在每个请求中传递一个参数,如下所示:

def default_url_options 
  { :my_default_param => my_param_value }
end  
现在,每个url帮助器在每个生成的url末尾附加一个my_default_参数。 例如,
user\u url(@current\u user)
生成如下url:

http://www.example.com/users/1?&my_default_param=my_param_value 
但有时我需要在没有默认参数的情况下生成url。是否有一些选项可以传递给url帮助程序,以便
user\u url(@current\u user,some\u option:some\u option\u value
)只返回:

http://www.example.com/users/1?&my_default_param=my_param_value
?

请注意:我已经尝试过使用
:overwrite_params=>{}
,但它不起作用,可能是因为它是在默认的\u url\u选项之前计算的

如果没有,是否有其他方法可以获得@current_用户url而不附带my_default_参数?


谢谢。

默认url\u选项
选项
,您可以随意使用:

def default_url_options( options = {} )

  use_defaults = options.delete( :use_defaults )

  if use_defaults
    { :my_default_param => 'my_param_value' }
  else
    {}
  end

end
或者你可以颠倒逻辑:

def default_url_options( options = {} )

  ignore_defaults = options.delete( :ignore_defaults )

  if ignore_defaults
    {}
  else
    { :my_default_param => 'my_param_value' }
  end

end

谢谢你,但我无法让它工作,我应该如何调用
user\u url(@current\u user)
来忽略默认值?(我更喜欢相反的逻辑)我尝试了
user\u url(@current\u user,ignore\u defaults:true)
,但不起作用。有什么想法吗?讽刺的是,它生成了一个带有
?my_default\u param=my_param\u value&ignore\u defaults=true
…我遗漏了什么?好像是很久以前的事了。如果您仍然需要答案,我已经提供了上面的monkey patching for rails方法,您应该将其添加到初始值设定项中。一般来说,您应该为
ActionDispatch::Routing::Mapper::Base
覆盖
默认url\u选项。
如果您想覆盖
默认url\u选项,您不能只做以下操作:
用户url(id:@current\u user,my\u default\u param:nil)