Ruby on rails 如何绕过默认的url选项?
在我的上一个Rails项目中,我必须覆盖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
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)
?