Dev*_*vin 3 ajax ruby-on-rails authlogic ruby-on-rails-3
我有一个Authlogic登录表单,:remote => true如果用户/密码无效,它会使用RJS模板进行一些内联验证.这工作得很好,但是当凭证是有效的,它不正确别处重定向.
这是响应表单输入的控制器:
class UserSessionsController < ApplicationController
respond_to :html, :js
before_filter :require_no_user, :only => [:new, :create]
before_filter :require_user, :only => :destroy
def new
@user_session = UserSession.new
end
def create
@user_session = UserSession.new(params[:user_session])
respond_to do |format|
if @user_session.save
flash[:notice] = "Login successful!"
format.html { redirect_to account_url }
else
format.js
end
end
end
def destroy
current_user_session.destroy
flash[:notice] = "Logout successful!"
redirect_to root_path
end
end
Run Code Online (Sandbox Code Playgroud)
该format.js部分有效但如果用户/密码良好(format.html),则没有任何反应.但是,如果我查看development.log,它会请求account_url页面.它不会在浏览器中重定向您.我认为它通过AJAX返回帐户页面,我真的只想要一个正常的重定向.
表单的HTML是这样的:
<%= simple_form_for(
:user_session, @user_session,
:url => { :controller => 'user_sessions', :action => "create" },
:html => { :id => 'login-dropdown' }, :remote => true) do |f| %>
Run Code Online (Sandbox Code Playgroud)
我找到了解决问题的方法.根据http://www.ruby-forum.com/topic/168406#945053,我将以下内容添加到我的应用程序控制器:
def redirect_to(options = {}, response_status = {})
if request.xhr?
render(:update) {|page| page.redirect_to(options)}
else
super(options, response_status)
end
end
Run Code Online (Sandbox Code Playgroud)
这可以防止重定向响应通过xhr传递.如果在控制器中有更"正确"的方法,我想听听它.
| 归档时间: |
|
| 查看次数: |
5140 次 |
| 最近记录: |