我的应用程序有一个模式登录表单,我使用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中显示在屏幕上而未加载正确。
答案 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