0

sign_in & sign_up 後に特定のページにリダイレクトしようとしています。私は2つのモデルのユーザーとリソースを持っています。sign_in の後、ユーザーに属するドキュメントのリストを表示したいと思います。ドキュメントがない場合は、users/:id/document#create にリダイレクトする必要があります。そうでない場合は、users/:id/document#index にリダイレクトします。

どうすればそれを行うことができますか?

コントローラーで定義されたリダイレクト パスに対して次のエラーが発生します。

ActiveRecord::DocumentsController#show の RecordNotFound

ID のないドキュメントが見つかりませんでした

Application_controller.rb

def after_sign_in_path_for(user)
 user_documents_url(user)
end

Routes.rb

 root :to => 'home#index'

   devise_for :users

   resources :users do
        resources :documents
   end
  devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end

ルート

root        /                                        home#index
        new_user_session GET    /login(.:format)                         devise/sessions#new
            user_session POST   /login(.:format)                         devise/sessions#create
    destroy_user_session DELETE /logout(.:format)                        devise/sessions#destroy
           user_password POST   /password(.:format)                      devise/passwords#create
       new_user_password GET    /password/new(.:format)                  devise/passwords#new
      edit_user_password GET    /password/edit(.:format)                 devise/passwords#edit
                         PUT    /password(.:format)                      devise/passwords#update
cancel_user_registration GET    /cancel(.:format)                        devise/registrations#cancel
       user_registration POST   /                                        devise/registrations#create
   new_user_registration GET    /sign_up(.:format)                       devise/registrations#new
  edit_user_registration GET    /edit(.:format)                          devise/registrations#edit
                         PUT    /                                        devise/registrations#update
                         DELETE /                                        devise/registrations#destroy
       user_confirmation POST   /confirmation(.:format)                  devise/confirmations#create
   new_user_confirmation GET    /confirmation/new(.:format)              devise/confirmations#new
                         GET    /confirmation(.:format)                  devise/confirmations#show
          user_documents POST   /users/:user_id/documents(.:format)      documents#create
      new_user_documents GET    /users/:user_id/documents/new(.:format)  documents#new
     edit_user_documents GET    /users/:user_id/documents/edit(.:format) documents#edit
                         GET    /users/:user_id/documents(.:format)      documents#show
                         PUT    /users/:user_id/documents(.:format)      documents#update

        /user/:user_id/documents(.:format)       user/documents#index

ありがとう

4

3 に答える 3

0

私が見るように、コード自体には問題はありません。ただし、このテストの前に、FactoryGirl またはスタブのいずれかによって、いくつかの「ドキュメント」データを作成する必要があります。

実際にはユーザーの「ドキュメント」データがないため、もちろん Rails は RecordNotFound エラーを発生させました。

于 2013-03-28T06:04:36.087 に答える
0

次のコードに従ってこのメソッドを使用します

  def after_sign_in_path_for(resource_or_scope)
     // redirect path
  end

これが役立つことを願っています

于 2013-03-28T06:20:00.903 に答える
0

この質問に従うことで問題を解決しました。以下は私のroutes.rbです

   resources :users do
        resources :documents, only: [:index]
   end
   resource :documents, except: [:index]

これにより、document#index パスと document#new パスが得られます。

于 2013-03-29T13:17:31.420 に答える