2012-02-21 13 views
0

(Noルートの試合は「/ user_sessions/...)。私は(このtutorial以下)Authlogicを使用した認証システムを作るしようとしています。ActionController :: RoutingError私はRuby on Railsをにスーパー新たなんだ

No route matches "/user_sessions/%23%3CUserSession:0x103486aa8%3E" 

驚くべきことに、エラーが表示されますフォームが送信された直後のページのURLは次のとおりです:

http://localhost:3000/user_sessions/%23%3CUserSession:0x103486aa8%3E 

I私は取得していますエラーは、私は、ログインフォームを送信した直後であります私が何を間違って行ったのか、そしてその奇妙なUserSessionコードがどこから来ているのか分かりません!!!

これは私のログインフォームがどのように見えるかです:ここでは

<% form_for @user_session do |f| %> 
    <%= f.error_messages %> 
    <p> 
    <%= f.label :username %><br /> 
    <%= f.text_field :username%> 
    </p> 
    <p> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %> 
    </p> 
    <p><%= f.submit "Submit" %></p> 
<% end %> 

は私のUserSessionクラスです:

class UserSession < Authlogic::Session::Base 
    def to_key 
    new_record? ? nil : [ self.send(self.class.primary_key) ] 
    end 
end 

UserSessionControllerアクションを作成:

def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     flash[:notice] = "Login successful!" 
     redirect_back_or_default root_path 
    else 
     render :action => :new 
    end 
    end 

"redirect_ba ck_or_default ApplicationControllerにの」方法:

def redirect_back_or_default(default) 
    redirect_to(session[:return_to] || default) 
    session[:return_to] = nil 
end 

そして最後にuser_sessionsに関連するすべてのものroutes.rbを中:

resources :user_sessions 

match 'login' => "user_sessions#destroy", :as => :login 
match 'logout' => "user_sessions#destroy", :as => :logout 

これらはI考えがあること得ることに関与することができることをコードしていますエラー。より明確にするためにいくつかのコードを追加する必要がある場合は、私に知らせてください。

+0

私達にあなたのUserSessionクラスを表示します。何かが間違っていて、正しくto_paramを呼び出していません。 – DGM

+0

私はUserSessionクラスを投稿に追加しました。 – soroush

+0

あなたはなぜto_keyに設定しましたか?あなたは何を達成しようとしていますか?ああ、チュートリアル...古いですが、あなたはその機能を必要としません... – DGM

答えて

1

[OK]を、まず、あなたが悪いのルートがあります、to_keyはそれ以降のバージョンでは必要ありません

match '/login', :to => 'user_sessions#new', :as => 'login' 

ノートnew代わりdestroy

のを - 私はレール3とドンを使用していますそれは私のUserSession Modelにはありません。

+0

ありがとうございます。あなたが正しいです。 to_key関数は必要ありません。しかし、私は自分のGemfileを更新し、 "gem authlogic"を "gem authlogic"に変更しなければなりません:git => 'git://github.com/odorcicd/authlogic.git'、:branch => 'rails3 ''と 'bundle install'を実行します。私のルートは実際に元のコードではうまくいきました。それはポストの単なる入力ミスです。ありがとう。 – soroush

+0

ハァッ。私は私のgemfileにgit repoを指定する必要はありません... – DGM

0

は間違いなく破壊するためにログインを一致しないためにあなたのルートを変更する必要があります。 これは私が持っているルート設定です(「Agile Web Development with Rails」の例を参照)。

controller :user_sessions do 

    get 'login' => :new 
    post 'login' => :create 
    delete 'logout' => :destroy 
end 
関連する問題