簡體   English   中英

設計和根本路線

[英]Devise and Root Route

我第一次在Rails應用中使用devise(2.1.2)。 我遵循了w /安裝過程,並生成了一個User模型。 我的設置非常通用,我只有兩個控制器。 昨天我幾個小時就開始運行並進行身份驗證,沒有任何問題。 我正在登錄和注銷,然后停止並重新啟動服務器,沒有問題。 生活是美好的。 然后當我嘗試訪問/ 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'

我真的不明白“設計/主要”的來源,我也不明白為什么重啟服務器后突然失敗了:(

這通常在您位於命名空間控制器中時發生(Devise視圖就是這種情況)。

在導致錯誤的link_to上,嘗試在控制器名稱前加一個斜杠。

在Github的Devise頁面上檢查此問題

發生這種情況的原因 :在devise_for的后台, devise_for方法實際上為“ devise controller”創建了一個命名空間。 您創建的設計視圖屬於該“設計控制器”,因此,當您使用link_to :controller => 'bla', Rails will try to find the controller devise名稱空間(不存在)和kaboom中link_to :controller => 'bla', Rails will try to find the controller bla`。 !

理想情況下,您應該使用基於資源的路由或命名路由。 這樣可以最大程度地減少此類問題,並且附帶條件可以使您的代碼更易於閱讀和維護(嗯,通常是這種情況,但這絕不是靈丹妙葯,請謹慎使用此建議)。

如果您仍然感到好奇,我建議您閱讀有關路由指南頁面 (非常簡單,直接了解內容 ),以及url_for文檔 (如果您對Rails認真的話,確實有幫助)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM