Rails ajax表单不是从另一个内部提交的

我有一个Rails 3.2 ajax表单,为酒店创建了一个新房间。 新的Room ajax表单在Room索引页面上正常工作,但是一旦我在Hotel编辑页面上嵌入了新的Room ajax表单,表单就会正常提交而不使用Ajax。

要创建新的Room表单,请使用Hotel edit.html.erb页面上的以下链接:

 @hotel.id), :remote => true, :class => 'new_room' %> 

这会将以下表单部分加载到同一页面:

  true, :html => { :class => "remote-form" } do |f| %>      @hotel_id %>     'room_create' %>  "room_cancel" %>  

最后,我在create.js.erb(在rooms文件夹中)中有以下内容:

 alert('Test creating a room'); var content = $(''); $("#room_list tbody").append(content); 

没有执行create.js.erb并定期提交表单(非ajax),我终于到达了show.html.erb页面。

为什么表单在单位索引页面上正常工作,而不是在相关的酒店编辑页面上?

即使你设置:remote => true ,Rails也会生成一个form标签。 浏览器不支持嵌套表单标记,并会导致不可预测的行为。

您应该在这里重新考虑视图架构。 您可以在酒店表格外面找到房间的表格,也可以使用fields_foraccepts_nested_attributes_for来编辑儿童对象。

以下是有关如何使用嵌套属性的完整示例: 嵌套属性示例 。

您不能在HTML格式中将表单嵌套在表单中。 当您单击表单上的任何提交按钮时,即使它在另一个表单中,也只会正确提交最外面的表单。

您可以使用嵌套属性将房间的属性直接添加到表单,以便在提交整个表单时,所有房间都是…或者使用div和链接,而不是表单和提交按钮。