1

簡単な Rails アプリの作成を開始し、Devise を認証に使用しました。ユーザーがログインした後、ユーザー用のダッシュボード ページを作成しました。以下に追加された users_contoller を使用しています。

class UserController < ApplicationController
    before_filter :authenticate_user!

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

この user#show の名前をルートのダッシュボードに変更しました。

match '/dashboard', to: 'user#show'

以下に示すように、これが機能するかどうかを確認するために、User show html ページに if else ステートメントを作成しました。

<% if @user.lists.any? %>
    Cool you have lists
<% else %>
    OK No Lists
    <%= @user[:id] %>
<% end %>

残念ながら、ブラウザでページをロードしようとすると、エラーが表示されるだけです

 Couldn't find User without an ID

これが単にDeviseの設定なのか、それとももっと基本的なものなのかはわかりません。これが初心者の質問である場合は、事前に謝罪してください。

4

2 に答える 2

2

ユーザーがdeviseを使用して認証されると、現在の認証されたユーザーは「current_user」と呼ばれるヘルパーに「保存」されます。

問題の簡単な修正は、「UserController」のコードを次のようなものに変更することです(同時に、残りの機能を強制します)。

class UserController < ApplicationController
    before_filter :authenticate_user!

    def show
        @user = params[:id].blank? ? current_user : User.find(params[:id])
    end
end
于 2013-01-05T13:49:32.963 に答える
0

あなたの route: にはパラメータmatch '/dashboard', to: 'user#show'が含まれていません.@ Immendesidが提案したように実行する必要があり、current_userヘルパー を使用する必要があります。match '/dashboard/:id', to: 'user#show'

于 2013-01-05T16:09:16.067 に答える