将http请求重定向到ajax

时间:2018-02-18 20:07:04

标签: ruby-on-rails ajax

我的应用程序有一个模式登录表单,我使用ajax显示:

<% if !current_user %>
  <%= link_to "Sign in", signin_path, remote: true %>
<% end %>

的routes.rb

get 'signin', to: 'static_pages#signin', as: 'signin'

static_pages_controller.rb

def signin
  respond_to do |format|
    format.html { render :action => 'signin.js.erb' }
    format.js   { render :action => 'signin.js.erb' }
  end     
end  

signin.js.erb

$('#modalPlaceholder').html("<%= j render(partial: '/static_pages/signin') %>");
$('#modalPlaceholder').show();

这很有效。

我现在想拦截需要用户登录并显示此模式的操作。在我的应用程序控制器中,我有:

application_controller.rb

def require_signin!
  if current_user.nil?
    render :action => '../static_pages/signin.js.erb'
  end
end
helper_method :require_signin!

当原始操作是远程时,这是有效的::true和rails只是重定向它,但是当原始操作是标准请求时,应用程序控制器正确拦截操作,但是模式在原始html中显示在屏幕上而未加载正确。

1 个答案:

答案 0 :(得分:0)

您可以检查请求的格式类型并为其呈现。

def require_signin!
  if current_user.nil?
    if request.format.html?
       #html render file here
    else
       render :action => '../static_pages/signin.js.erb'
    end
  end
end