2016-04-21 61 views
2

當我嘗試加載用戶的放映視圖,它得到了UsersController錯誤Couldn't find User with 'id'=軌找不到用戶與「ID」 =

它專門指向二線

def show 
@user = User.find(params[:id]) ## shows the error in this line 
end 

有趣的是,它二手加載,直到我改變了路線這樣:

Rails.application.routes.draw do 
    devise_for :users 
    get 'users/show' 
    root 'users#show' 
    get 'welcome/index' 
    resources :users 
end 

爲什麼我在更改路由後出現此錯誤?(我改變了,因爲我的目標是在設計登錄後直接進入用戶配置文件)它如何修復?

哦,下面是我的情況下,用戶放映視圖錯誤是在那裏:

<h1>This is the user show view </h1> 
<p>Your email is: <%= @user.email %></p> 
<p>Your name is: <%= @user.name %></p> 

謝謝。

+0

如果您想在登錄後進入'show'動作而不是'@user = User.find(params [:id])',您可以執行'@user = cu rrent_user' – dp7

+0

這樣做,非常感謝! – sergio

+0

我已將它添加爲答案。很高興它對你有效! – dp7

回答

0

這不起作用:

root 'users#show' 

它告訴軌使用用戶#顯示爲起始頁 但Rails不知道它應該顯示哪些用戶,然後頁面。那麼沒有給出用戶標識。這就是爲什麼你在錯誤信息id=中看到沒有等號後面的東西。

+0

注意到,這是有道理的,謝謝。 但是,上面的答案讓我只需將用戶控制器中的show操作更改爲: @user = current_user#(而不是:User.find(params [:id]) 這有效,但也可以接受,或者會在後面造成負面影響嗎? – sergio

+0

它可以工作,但是,show動作不能再顯示另一個用戶的頁面。 – Meier

0

默認情況下,設計將您重定向到根路徑。

默認根路徑'welcome/index'是一個集合操作。也就是說,它不需要傳入一個id。

現在您已將其更改爲成員操作'users/show /:id'。所以你需要傳入ID。

最簡單的方法是重寫色器件在應用控制器是這樣的:

def after_sign_in_path_for(resource)  
    redirect_to root_path(current_user.id) 
end  
1

如果你想去顯示登錄後的行動,而不是

@user = User.find(params[:id]) 

你可以這樣做:

@user = current_user