我使用了在Rails中使用Javascript指南中的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
格式块,问题仍然存在。)如此处和此处所示,将
render layout: false
包含在控制器操作中可以修复该问题。# thing_controller.rb
layout 'foo'
def create
render layout: false
end
但是我为什么需要在这里使用render layout: false
?为什么Rails会在html布局中呈现javascript?我感到困惑的是,我在其他几个地方使用过相同的习语,以前从未遇到过这个问题。