【问题标题】:How to use format.js when credentials are incorrect and redirect when credentials are correct?当凭据不正确时如何使用 format.js 并在凭据正确时重定向?
【发布时间】:2012-11-08 17:24:38
【问题描述】:

我正在为用户会话使用 Authlogic gem。

登录表单以模态显示,所以如果用户凭据不正确,我想在模态上显示错误消息,这就是我使用remote: true的原因。

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

当user_session出错时我想respond_to 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)

【问题讨论】:

    标签: ruby-on-rails authlogic


    【解决方案1】:

    尝试以下技巧而不是重定向:

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

    将 /index 替换为您的根 url。似乎 Rails 正在为这两种情况寻找 javascript 类型响应,因为您使用了 ajax

    【讨论】:

    • 谢谢,成功了!我做了一个 redirect_back 是:render :js =&gt; "window.location = '#{session[:return_to]}'"
    猜你喜欢
    • 2012-05-08
    • 2013-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-23
    • 2013-02-05
    • 2015-08-31
    相关资源
    最近更新 更多