【发布时间】:2017-04-18 00:47:06
【问题描述】:
我正在使用 Working with Javascript in Rails 指南中的 remote: true 成语:
# new.html.slim
= form_for @thing, remote: true do |f|
f.text_field :whatever
f.submit 'Submit'
# thing_controller.rb
layout 'foo'
def create
end
# create.js.erb
alert('foobar')
这失败了,因为 create.js.erb 出于某种原因呈现在“foo”布局内并以 html 而不是 javascript 返回,尽管请求被正确处理为 Javascript:
Processing by ThingsController#create as JS
Parameters: {"utf8"=>"✓", "commit"=>"Submit"}
Rendered things/create.js.erb (0.6ms)
(无论我在控制器操作中是否有明确的respond_to 格式块,问题都是一样的。)
如上所述 here 和 here,包括控制器操作中的 render layout: false 修复了问题:
# thing_controller.rb
layout 'foo'
def create
render layout: false
end
但是为什么我在这里需要render layout: false?为什么 Rails 在 html 布局中呈现 javascript?我特别困惑,因为我在其他几个地方使用过相同的成语,以前从未遇到过这个问题。
【问题讨论】:
标签: javascript ruby-on-rails ruby-on-rails-4