0

omn​​iauth を使用して 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

そして、レーキルートに基づいて、次のリンクを作成しました

  • <%= link_to "current_user.name", session_path %> としてサインインしました!
  • しかし、同じエラーが発生しました

    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'
    

    誰かが私が間違っていることを指摘できますか?

    4

    1 に答える 1

    2

    変更してみてください:

    <%= link_to "current_user.name", twitteruser_path %>
    

    に:

    <%= link_to current_user.name, twitteruser_path(current_user) %>
    

    current_userにデータが入力されている場合にのみレンダリングするように、このセクションを変更します。

    <% if current_user %>
      Your link here
    <% end %>
    
    于 2013-02-15T05:13:24.887 に答える