必须调用“render :layout => false”才能在 Rails 2.3.3 中正确渲染 js.erb 模板

2024-03-17

我正在运行最新的 Rails 2-3-stable 分支(当前为 2.3.3)。

我正在使用 JQuery 将 AJAX 请求发布到我的“创建”操作,其中有以下块:

respond_to do |format|
  format.js
end

我创造了create.js.erb为了测试此操作,我添加了以下一行:

alert('hello');

请求正确进入 format.js 块,但响应尝试渲染布局。这是我的日志:

Jul 22 20:44:27 [2970] INFO: Rendering template within layouts/application
Jul 22 20:44:27 [2970] INFO: Rendering contacts/create

如果我改变我的respond_to阻止以下内容,它可以工作:

respond_to do |format|
  format.js { render :layout => false }
end

这是预期的行为还是 Rails 中的错误?我本以为我正在渲染 JS 响应这一事实足以将布局设置为 false。


我用这个:

class ApplicationController < ActionController::Base
  # this is needed to prevent XHR request form using layouts
  before_filter proc { |controller| (controller.action_has_layout = false) if controller.request.xhr? }

它的作用就像魅力一样。您只需将这一衬垫放在一个地方,仅此而已。

我花了大约 1 个小时来写这行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

必须调用“render :layout => false”才能在 Rails 2.3.3 中正确渲染 js.erb 模板 的相关文章

随机推荐