我正在使用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
我遇到的问题是,如果凭据正确,则页面不重定向。
以下是使用适当凭据生成的请求请求的屏幕截图:
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
(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)
答案 0 :(得分:1)
尝试以下hack而不是重定向:
render :js => "window.location = '/index/'"
用你的根网址替换/索引。由于您使用了ajax
,Rails似乎正在寻找两种情况的javascript类型响应