4

在我上一个 Rails 项目中,我必须重写default_url_optionsapplication_controller.rb始终通过每个请求传递一个参数,如下所示:

def default_url_options 
  { :my_default_param => my_param_value }
end  

现在每个 url 助手都在每个生成的 url 的末尾附加一个 my_default_param 。例如user_url(@current_user)生成一个 url,如:

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

但有时我需要在没有 my_default_param 的情况下生成 url。是否有一些选项可以传递给 url 帮助程序,以便user_url(@current_user, some_option: some_option_value) 仅返回:

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

?

PN:我已经尝试过,:overwrite_params=> { }但它不起作用,可能是因为它是在 default_url_options 之前评估的。

如果没有,是否有另一种方法可以在不附加 my_default_param 的情况下获取 @current_user url?

谢谢你。

4

1 回答 1

4

default_url_options 有一个 options你可以随意使用的参数:

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
于 2012-07-13T15:30:35.037 回答