Rails 3.2使用render / redirect_to和url_options进行奇怪的行为

时间:2013-03-06 20:11:27

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我在使用RoR 3.2.8运行的应用程序中工作,在我的控制器中,我有redirect_to或渲染类似:

# doesn't work
redirect_to bar_foo_path 

# doesn't work
respond_to do |format|
  format.html {render bar_foo_path} 
end

#works
respond_to do |format|
  format.html {render 'bar'} 
end

#works
respond_to do |format|
  format.html 
end

并且所有这些案例总是工作得很好,直到我添加此代码以始终在网址中发送参数以用于本地化目的

  #def default_url_options(options={})
  #  logger.debug "=================================> default_url_options is passed options: #{options.inspect}\n"
  #  { :locale => I18n.locale }
  #end

  def url_options
    { :locale => I18n.locale }.merge(super)
  end

任何这些选项都会引发同样的问题

Template is missing

Missing template /foo/bar?locale=en with {:locale=>[:en], :formats=>[:html], :handlers=>[:haml, :erb, :builder, :coffee]}. Searched in: * "path_to_app/app/views" * "path_to_app" * "/" 

到目前为止我注意到的是,当使用路径助手构建路径时,它会搜索/ foo / bar?locale = en,当在render / redirect_to中使用键时,它会搜索foo / bar?locale = en

我无法弄清楚为什么没有使用url_options时没有问题。

注意:

更改render action_controller_path for render:action解决了它实际上从来不是redirect_to错误的问题,当我在另一个动作中调用redirect_to时,我有一个render action_controller_path。无论如何,我想知道为什么在路由助手调用渲染时如果你不做这样的事情就像在这种情况下从应用程序控制器调用default_url_options一样。

0 个答案:

没有答案