omniauth を使用して Twitter でサインインする Rails アプリケーションで、ルートが一致しないというエラーが発生します。Railscast に沿ってアプリケーションを開始しました。ログインした Twitter ユーザーは、このようなセッション コントローラーで作成されました。
class SessionsController < ApplicationController
def create
twitteruser = Twitteruser.from_omniauth(env["omniauth.auth"])
session[:twitteruser_id] = twitteruser.id
redirect_to twitterquestions_url, notice: "Signed in!"
end
このようなユーザーのTwitter情報を格納するテーブルを作成しました
def change
create_table :twitterusers do |t|
t.string :provider
t.string :uid
t.string :name
t.string :image
t.timestamps
end
end
これはデータベースエントリです
=> [#<Twitteruser id: 1, provider: "twitter", uid: "1121308772", name: "mytwitteraccou t", image: "http://a0.twimg.com/profile_images/3164285746/.", created_at: "2013-02-12 23:52:44", updated_at: "2013-02-12 23:52:44">]
また、ユーザーに表示できるように、このような Twitterusers コントローラーも作成しました
class TwitterusersController < ApplicationController
def show
@twitteruser = Twitteruser.find(params[:id])
end
end
ルートファイル内
resources :twitterusers
rake routes の出力に基づいて、このような currentusers プロファイルへのリンクを作成しました (また、ビューに show.html.erb ファイルを追加しました)
<li>Signed in as <%= link_to "current_user.name", twitteruser_path %>!</li>
レーキルート
twitterusers GET /twitterusers(.:format) twitterusers#index
POST /twitterusers(.:format) twitterusers#create
new_twitteruser GET /twitterusers/new(.:format) twitterusers#new
edit_twitteruser GET /twitterusers/:id/edit(.:format) twitterusers#edit
twitteruser GET /twitterusers/:id(.:format) twitterusers#show
PUT /twitterusers/:id(.:format) twitterusers#update
DELETE /twitterusers/:id(.:format) twitterusers#destroy
そのエラーが発生したとき、ユーザーが sessions_controller で作成されたという事実と関係があるのではないかと考えたので、セッション コントローラーで show アクションを作成しました。
セッションコントローラー
def show
@twitteruser = Twitteruser.find(params[:id])
end
ルートにセッションリソースを作成しました
resources :sessions
そして、レーキルートに基づいて、次のリンクを作成しました
しかし、同じエラーが発生しました
sessions GET /sessions(.:format) sessions#index
POST /sessions(.:format) sessions#create
new_session GET /sessions/new(.:format) sessions#new
edit_session GET /sessions/:id/edit(.:format) sessions#edit
session GET /sessions/:id(.:format) sessions#show
PUT /sessions/:id(.:format) sessions#update
DELETE
これらのルートはセッション コントローラーに既に存在していました
match 'auth/:provider/callback', to: 'sessions#create'
match 'auth/failure', to: redirect('/')
match 'signout', to: 'sessions#destroy', as: 'signout'
誰かが私が間違っていることを指摘できますか?