簡體   English   中英

Ruby on Rails 4:使用用戶控制器進行設計,找不到具有'id'= sign_up的用戶

[英]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_upsign_out被定義為/users/sign_up(.:format)因此,假設您訪問sign_up url,則它將檢查設計中的路由並在其中找到匹配項。 因此它將重定向您到該路由。 現在,如果您輸入/users/1 ,它將在設計路線中找到但找不到匹配項,因此最終它將映射到您的路線,並且如果沒有這樣定義的路線,則會引發錯誤。

很高興這有所幫助。 :)

暫無
暫無

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

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