0

ユーザー セッションに Authlogic gem を使用しています。

ログイン フォームはモーダルで表示されるため、ユーザーの資格情報が正しくない場合は、モーダルにエラー メッセージを表示したいので、 を使用しますremote: true

<%= form_for @user_session, url: user_session_path, ***remote: true do |f| %>

user_session にエラーがあった場合に format.js に応答し、user_session が正しく保存された場合に redirect_back_or_default root_path を返したい

私が抱えている問題は、資格情報が正しい場合、ページがリダイレクトされないことです。

以下は、適切な資格情報を含むリクエストの結果のリクエストのスクリーンショットです。 リクエスト

user_sessions_controller.rb

class UserSessionsController < ApplicationController
  before_filter :require_no_user, :only => [:new, :create]
  before_filter :require_user, :only => :destroy

  def new
    @user_session = UserSession.new
    if @user_session.save
      redirect_back_or_default root_path
    else
      format.js
    end
  end

  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

  def destroy
    current_user_session.destroy
    flash[:notice] = "Logout successful!"
    redirect_to authentications_path
  end
end

new.js.erb

(function($){
  <% if @user_session.errors.any? %>
    $errorsContainer = $("#login-errors").empty();
    <% @user_session.errors.full_messages.each do |msg| %>
      $errorsContainer.append('<div class="alert alert-error"><%= msg %></div>');
    <% end %>
  <% end %>
})(jQuery)
4

1 に答える 1

1

リダイレクトの代わりに次のハックを試してください。

render :js => "window.location = '/index/'"

/index をルート URL に置き換えます。ajaxを使用したため、Railsは両方のケースでjavascriptタイプの応答を探しているようです

于 2012-11-08T17:37:47.767 に答える