必须调用"render:layout => false"才能在Rails 2.3.3中正确呈现js.erb模板

Oll*_*lly 3 ruby ruby-on-rails

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

我正在使用JQuery向我的'create'操作发布一个AJAX请求,其中我有以下块:

respond_to do |format|
  format.js
end
Run Code Online (Sandbox Code Playgroud)

我已创建create.js.erb并测试此操作,我添加了以下单行:

alert('hello');
Run Code Online (Sandbox Code Playgroud)

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

Jul 22 20:44:27 [2970] INFO: Rendering template within layouts/application
Jul 22 20:44:27 [2970] INFO: Rendering contacts/create
Run Code Online (Sandbox Code Playgroud)

如果我将respond_to块更改为以下内容,则可以:

respond_to do |format|
  format.js { render :layout => false }
end
Run Code Online (Sandbox Code Playgroud)

这是预期的行为还是Rails中的一个错误?我原以为我渲染JS响应就足以将布局设置为false.

Szy*_*Jeż 10

我用这个:

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? }
Run Code Online (Sandbox Code Playgroud)

它就像魅力一样.你必须将这个在线人员放在一个地方并注意更多.

我花了大约1小时写这行.