ユーザーのプロファイル ページを作成しようとしていますが、ルーティング エラーが原因で、ユーザーがログインするとすぐに行き詰まります。最初のページを読み込もうとしても、同じ問題が再び発生します。レーキ ルートを実行すると、次のユーザー パスが取得されます。
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
user_omniauth_authorize /users/auth/:provider(.:format) users/omniauth_callbacks#passthru {:provider=>/facebook|twitter/}
user_omniauth_callback /users/auth/:action/callback(.:format) users/omniauth_callbacks#(?-mix:facebook|twitter)
user_password POST /users/password(.:format) devise/passwords#create
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
PUT /users/password(.:format) devise/passwords#update
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
これは、私の Users::OmniauthCallbacksController がどのように見えるかです:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
def facebook
@user = User.find_for_facebook_oauth(request.env["omniauth.auth"], current_user)
if @user.persisted?
sign_in_and_redirect @user, :event => :authentication
set_flash_message(:notice, :success, :kind => "Facebook") if is_navigational_format?
else
session["devise.facebook_data"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
end
これについてはよくわかりませんが、デバイスの外部にメソッドを実装できる UsersController を作成する必要があると考えました。これは次のようになります。
class UsersController < ApplicationController
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @ingredients }
end
end
def profile
@user = current_user
respond_to do |format|
format.html
format.json { render json: @ingredients }
end
end
def show
@user = User.find(params[:id])
respond_to do |format|
format.html
format.json { render json: @ingredients }
end
end
end
私の routes.rb には、次のユーザー関連の行があります。
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
resources :users
ユーザーがログインしているときに最初のページを読み込むと、次のエラーが表示されます。
Routing Error
No route matches {:action=>"show", :controller=>"users"}"
何か案は?