weixin_33681778 2018-02-18 20:07 采纳率: 0%
浏览 12

将http请求重定向到ajax

My app has a modal sign in form that I display using 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();

This works well.

I would now like to intercept actions that require user sign in and display this modal. In my application controller I have:

application_controller.rb

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

This works when the originating action is remote: :true and rails simply redirects it however when the originating action is a standard request the action is intercepted correctly by the application controller however the modal is displayed on screen in raw html and not loaded correctly.

  • 写回答

1条回答 默认 最新

  • weixin_33747129 2018-02-18 20:53
    关注

    You can check format type of request and render for it.

    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
    
    评论

    报告相同问题?

    悬赏问题

    • ¥15 摁摁钮(接P3.4口)无法实现点阵管播放速度调节,大家能帮我看看是什么问题吗?TAT
    • ¥15 小型网络防火墙mstp.vrrp.ospf配置
    • ¥15 grafna发送告警信息
    • ¥15 51单片机,LCD屏幕内容修改
    • ¥20 Ida Pro动态调试
    • ¥15 TensorFlow深度学习拓展项目
    • ¥20 springboot博客系统
    • ¥15 MICE包多重插补后数据集汇总导出
    • ¥15 一道算法分析问题(关于3-MSAT)
    • ¥15 C++ FLUENT 化学反应速率 编写困难