我开始在这个 SO 问题中解决我的“突然”中断路由问题: 设计 /users/sign_in 重定向到错误的控制器,并在帮助下,我能够将问题隔离到从旅程 1.0.3 升级到 1.0.4 时发生的问题更新到轨道 3.2.7。
如您所知,我们需要使用 rails 3.2.8,才能应用重要的安全修复,但这意味着我必须使用旅程 1.0.4,这会破坏我的设计路线。例如,我的自定义 new_user_session 路由是welcome#welcome,但它被解码为不存在的devise/welcome#welcome。
有没有其他人遇到过这个三角恋,如果有的话,你是如何让旅程 1.0.4 与设计相得益彰的?
被破坏的路线(根和设计路线:
devise_for :users
devise_scope :user do
get "/login" => "devise/sessions#new"
get "/register" => "devise/registrations#new"
end
match '/signout/confirm' => 'signouts#confirm'
root :to => "welcome#welcome"
==================================================== ===============
编辑:2012-09-05
解决方案:
我发现了有问题的 LOC:
link_to_unless_current( logo_image, { :controller => 'welcome', :action => 'welcome' } )
我将其更改为:
link_to_unless_current( logo_image, { :controller => '/welcome', :action => 'welcome' } )
无济于事。
出于好奇,我将其更改为:
link_to( logo_image, { :controller => '/welcome', :action => 'welcome' } )
这很有效,就像:
link_to( logo_image, { :controller => 'welcome', :action => 'welcome' } )
所以我尝试的最后一件事是:
link_to_unless_current( logo_image, root_path )
这奏效了,现在宇宙一切都很好。
事后分析:由于我对 rails 文档缺乏经验,我推断虽然link_to()
会接受 root_path 作为参数,但事实link_to_unless_current()
并非如此。直到我查看了方法的源代码,我才发现(并且应该一直假设)它link_to_unless_current()
是建立link_to_unless()
在link_to()
.
非常感谢在此线程和上一个线程中提供帮助的人们。