1

私の心の動きが遅い...これは簡単な問題だ...わかってる。ここで私の愚かさを許してください...

認証されたユーザーをそのユーザーのプロフィール ページに誘導したいと考えています。

注:Deviseを使用しています。

注 2: routes.rb ファイル全体をここで見ることができます....pastie.org/6142383

「レーキルート」を実行すると、ルート情報としてこれを取得します....

profile GET        /profiles/:id(.:format)                       profiles#show

したがって、routes.rbファイルでこれを試しました...

authenticated :user do
  root :to => 'profiles#show'
end

しかし、「app/controllers/profiles_controller.rb line 17」というエラーが表示されます...

@profile = Profile.find(params[:id])

したがって、routes.rbでparams[:id]を何らかの形で示す必要がありますが、どうすればよいかわかりません...

authenticated :user do
  root :to => '?'  # how to land user on www.website.com/profile/1
end 

お時間をいただきありがとうございます...

アップデート:

私は宝石「より良いエラー」を使用しています(この宝石についてはこちらをご覧ください)http://selfless-singleton.rickwinfrey.com/2012/12/13/better-errors/エラーの読み取り....

ActiveRecord::RecordNotFound at /
Couldn't find Profile without an ID

ProfileControllers#show
app/controllers/profiles_controller.rb, line 17

そして、正確な行を表示します...

12   end
13 
14   # GET /profiles/1
15   # GET /profiles/1.json
16   def show
17     @profile = Profile.find(params[:id])
18 
19     respond_to do |format|
20       format.html # show.html.erb
21       format.json { render json: @profile }
22     end
4

2 に答える 2

4

他のプロファイルに加えて、単一のリソースが必要なようです。Deviseでは次のように動作します。

resources :users

authenticate(:user) do
  get '/profile', to: 'users#show'
end

そして、あなたのusers_controller.rb

def show
  if params[:id]
      @user = User.find(params[:id])
  else
    # Show the currently logged in user
    @user = current_user
  end
  ....
end

サインインに成功した後、ユーザーが着地する場所をカスタマイズするには、このメソッドを次の場所に追加/カスタマイズしますApplicationController

def after_sign_in_path_for(resource)
 current_user_path
end

その他の便利なガイド:https ://github.com/plataformatec/devise/wiki/_pages

于 2013-02-12T20:43:55.643 に答える
0

答えは次のとおりです。

def after_sign_in_path_for(resource)
  profile_path(resource.profile)
end
于 2013-02-12T23:00:07.173 に答える