質問

Ruby on Railsは非常に初めてです。 authlogicを使用して認証システムを作成しようとしています(これに続いて チュートリアル)。私が得ているエラーは、ログインフォームを送信した直後です。

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

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

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

私が何を間違えたのか、そしてその奇妙なユーザーセッションコードがどこから来ているのか分かりません!!!

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

<% 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 %>

これが私のユーザーセッションクラスです:

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_back_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

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

役に立ちましたか?

解決

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

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

注意してください new それ以外の destroy

また、TO_KEYは後のバージョンでは必要ありません - 私はRails 3を使用しており、ユーザーセッションモデルにはありません。

他のヒント

ログインを一致させないためにルートを変更するために、間違いなく破壊する必要があります。これが私が持っているルート設定です...(「レール付きのアジャイルWeb開発」の例から)。

controller :user_sessions do

  get 'login' => :new
  post 'login' => :create
  delete 'logout' => :destroy
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top