1

我第一次在 rails 应用程序中使用设计(2.1.2)。我已经按照安装过程进行并生成了一个用户模型。我的设置非常通用,我只有两个控制器。昨天,我已经启动并运行了几个小时,并且毫无问题地进行了身份验证。我正在登录和注销并停止并重新启动我的服务器而没有问题。生活很好。然后当我尝试访问 /main/index (受保护)时,它突然重定向到 users/sign_in ,这是有道理的,但我收到了这个错误

没有路线匹配 {:controller=>"devise/main"}

这是routes.rb

get "bid/index"
get "main/index"
get "main/feed"
get "main/admin"
get "main/fullday"
match "bid/bid/:id/:starttime/:endtime/:color" => "bid#bid"
match "bid/delete/:id" => "bid#delete"
match "main/bidfeed/:id" => "main#bidfeed"
match "main/attr/:id/:field/:value" => "main#attr"

devise_for :users
root :to => 'main#index'

我真的不明白“设计/主要”来自哪里,我不明白为什么在我重新启动服务器后突然失败了:(

4

1 回答 1

2

这通常发生在您位于命名空间控制器中时(设计视图就是这种情况)。

link_to导致错误的地方,尝试在控制器名称前加上斜杠。

在 Github 的设计页面上检查这个问题

为什么会发生这种情况:在引擎盖下,devise_for您的 routes.rb 上的方法实际上为您的“设计控制器”创建了一个命名空间。您创建的设计视图属于该“设计控制器”,因此,当您link_to :controller => 'bla', Rails will try to find the controller在不存在的设计名称空间内使用 bla` 时,kaboom!

理想情况下,您应该使用基于资源的路由或命名路由。这将最大限度地减少此类问题,并且附带使您的代码更易于阅读和维护(嗯,通常是这种情况,但这绝不是灵丹妙药 - 谨慎使用此建议)。

如果您仍然好奇,我建议您阅读有关路由的指南页面(非常简单且直截了当),以及url_for 的文档(如果您对 Rails 很认真,真的很有帮助)。

于 2013-04-09T22:26:22.373 回答