2015-07-19 75 views
0

我得到這個錯誤:Couldn't find User with 'id'=sign_up當我試圖去localhost:3000/users/sign_up in我的URL瀏覽器。Ruby on Rails 4:設計用戶控制器,找不到用戶'id'= sign_up

我有生成的單獨的用戶控制器...

我這樣做:

rails g devise:controllers users 
rails g controller Users show 

我沒有碰,是由色器件所產生的控制器。

在我所創建的普通用戶控制器,我有這樣的:

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,我只是沒有得到我應該做的事情來修復 這個。

當然,它會永遠給我任何錯誤後本地主機:3000 /用戶/因爲在用戶控制器我的表演方法的id

+1

改變你的路線的順序讓'devise_for:users'在devise_scope之上,然後嘗試 – Deep

+0

@Deep沒有工作。我不認爲這個順序很重要? – hellomello

+0

當我們有類似的路線時它很重要。 – Deep

回答

1

你有一個單獨的users_controller它沒有按」 t屬於devise因此devise_scope在那裏沒用。如果您需要使用任何設計控制器操作,則devise_scope非常有用。因此,只要你的路線如下:

devise_for :users 
get 'users/:id' => 'users#show', as: :user 

當我們有類似的路線時,路線順序很重要。在設計路線sign_up,sign_out定義爲/users/sign_up(.:format)所以假設你訪問sign_up網址,然後它會檢查設計路線,並會在那裏找到匹配。所以它會將您重定向到該路線。現在,如果您輸入/users/1它會在設計路線中找到,但它將找不到匹配,因此最終它會映射到您的路線,並且如果沒有定義此路線,則會發出錯誤..

很高興這有所幫助。 :)

+1

感謝您的幫助和解釋! – hellomello

相關問題