[英]Ruby on Rails 4: Devise with Users Controller, Couldn't find User with 'id'=sign_up
我收到此錯誤:當我嘗試在URL瀏覽器中轉到localhost:3000 / users / sign_up時 , Couldn't find User with 'id'=sign_up
用戶 。
我有一個生成的單獨的用戶控制器...
我這樣做:
rails g devise:controllers users
rails g controller Users show
我沒有碰到由devise生產的控制器。
在我創建的常規用戶控制器中,我有以下內容:
class UsersController < ApplicationController
def show
@user = User.find(params[:id])
end
end
在我的路線中:
devise_scope :user do
get 'users/:id' => 'users#show', as: :user
end
devise_for :users
我的rake routes
看起來像這樣:
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
user GET /users/:id(.:format) users#show
為什么出現錯誤是有道理的,因為:id在我的URL中是sign_up,我只是不知道應該怎么做才能解決此問題。
當然,由於localhost:3000 / users /之后的用戶 ,我的show方法中的id總是會給我任何錯誤:
你有一個獨立的users_controller
不屬於devise
使devise_scope
是沒有用那里。 如果您需要使用任何devise_scope
控制器操作,那么devise_scope
很有用。 因此,只需按照以下步驟進行路線:
devise_for :users
get 'users/:id' => 'users#show', as: :user
當我們有相似的路線時,路線的順序很重要。 在設計路由中, sign_up
, sign_out
被定義為/users/sign_up(.:format)
因此,假設您訪問sign_up
url,則它將檢查設計中的路由並在其中找到匹配項。 因此它將重定向您到該路由。 現在,如果您輸入/users/1
,它將在設計路線中找到但找不到匹配項,因此最終它將映射到您的路線,並且如果沒有這樣定義的路線,則會引發錯誤。
很高興這有所幫助。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.