【问题标题】:Render a .js controller request as html将 .js 控制器请求呈现为 html
【发布时间】:2012-05-15 19:18:31
【问题描述】:

我的 Rails 应用程序中有一个before_filter,如果用户在提交请求(以 html 或 js 格式)时注销,它会将用户发送到login_url

我希望我的format.js 产生与format.html 相同的结果,在以下情况下以“通知”布局呈现视图。我该怎么做?

respond_to do |format|
  format.js
  format.html{ render :layout => "notice" }
end

【问题讨论】:

    标签: ruby-on-rails ajax ruby-on-rails-3 controller


    【解决方案1】:

    你可以像这样强制使用可用的格式:

    respond_to do |format|
      format.js   { render :layout => "notice", :formats => [:html] }
      format.html { render :layout => "notice" }
    end
    

    编辑:

    您需要的是文档的某些部分被响应替换。这是通过使用完成这项工作的 javascript 响应来完成的:

    在您的控制器中:

    respond_to do |format|
      format.js
      format.html { render :layout => "notice" }
    end
    

    在您的 login.js 视图中:

    $('#whatever').html('<%= escape_javascript( render :login, formats: [ :html ]) %>')
    

    ...或类似的东西

    【讨论】:

    • 您好,感谢您的来信。您的解决方案阻止我收到错误,但我仍然有一个问题,如果有人提交 AJAX 请求,似乎什么都没有发生。服务器认为它已经完成了它的工作,但用户没有看到任何不同。如何转换 JS 请求以使登录页面显示给用户?
    • 在这种情况下,响应必须是包含您的布局内容的脚本(请参阅我的编辑):
    猜你喜欢
    • 2014-01-25
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    相关资源
    最近更新 更多