0

私はRuby on Railsの初心者です。Authlogic を使用して認証システムを作成しようとしています (このチュートリアルに従ってください)。ログインフォームを送信した直後に発生するエラーは次のとおりです。

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

驚くべきことに、フォームが送信された直後のページの URL も次のようになります。

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

何を間違えたのか、その奇妙な 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

ApplicationControllerの「redirect_back_or_default」メソッド:

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

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

resources :user_sessions

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

これらは、そのエラーの発生に関与している可能性があると私が考えたコードです。より明確にするためにコードを追加する必要がある場合は、お知らせください。

4

2 に答える 2

1

わかりました、最初に、あなたは悪いルートを持っています:

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

newの代わりに注意してくださいdestroy

また、to_key はそれ以降のバージョンでは必要ありません。私は Rails 3 を使用しており、UserSession モデルにはありません。

于 2012-02-21T19:35:00.963 に答える
0

ログインと一致しないようにルートを変更して破棄する必要があります。これが私が持っているルート設定です...(「Railsを使用したアジャイルWeb開発」の例から)。

controller :user_sessions do

  get 'login' => :new
  post 'login' => :create
  delete 'logout' => :destroy
end
于 2012-02-22T03:50:45.850 に答える