Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails ajax表单未从其他表单中提交_Ruby On Rails_Ajax_Jquery_Ruby On Rails 3.2 - Fatal编程技术网

Ruby on rails Rails ajax表单未从其他表单中提交

Ruby on rails Rails ajax表单未从其他表单中提交,ruby-on-rails,ajax,jquery,ruby-on-rails-3.2,Ruby On Rails,Ajax,Jquery,Ruby On Rails 3.2,我有一个Rails 3.2 ajax表单,它为一家酒店创建了一个新房间。新的roomajax表单在roomindex页面上可以正常工作,但是一旦我将新的roomajax表单嵌入到酒店编辑页面上,表单就会正常提交,而不使用ajax 要创建新的房间表单,我使用Hotel edit.html.erb页面上的以下链接: <%#= link_to 'Add a Room', new_room_path(:hotel_id => @hotel.id), :remote => true, :

我有一个Rails 3.2 ajax表单,它为一家酒店创建了一个新房间。新的roomajax表单在roomindex页面上可以正常工作,但是一旦我将新的roomajax表单嵌入到酒店编辑页面上,表单就会正常提交,而不使用ajax

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

<%#= link_to 'Add a Room', new_room_path(:hotel_id => @hotel.id), :remote => true, :class => 'new_room' %>
@hotel.id),:remote=>true,:class=>'新房间'>
这会将以下表单部分加载到同一页面:

<%= form_for @room, :remote => true, :html => { :class => "remote-form" } do |f| %>
 <%= f.text_field :number %>
 <%= f.text_field :size %>

  <% if(params.has_key?(:'hotel_id')) %>
    <% @hotel_id = params[:hotel_id] %>
    <%= f.hidden_field :hotel_id, :value => @hotel_id %>                    
  <% else %>
    <%= f.collection_select(:hotel_id, Hotel.all, :id, :name) %>
  <% end %>

 <%= f.submit "Add this room", :class => 'room_create' %>
 <%= link_to 'Cancel', '#', :class => "room_cancel" %>
<% end %>
true,:html=>{:class=>“远程表单”}do | f |%>
@酒店id%>
“创建文件室”%>
“房间取消”%>
最后,我在create.js.erb(在rooms文件夹中)中有以下内容:

alert(“创建房间的测试”);
var内容=$('');
$(“#房间列表主体”)。追加(内容);
create.js.erb没有执行,表单定期提交(非ajax),我最终到达room show.html.erb页面


为什么表单在Units index页面上工作正常,而在关联的Hotel edit页面上工作不正常?

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


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

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

您应该重新考虑这里的视图体系结构。可能您可以在酒店的表单之外拥有房间的表单,或者您可以使用和编辑子对象


下面是关于如何使用嵌套属性的完整示例:

谢谢。这是正确的,但我更喜欢@alfonso的答案,因为它对我的帮助稍大一些。谢谢。我完全忽略了我在嵌套表单。我将从编辑页面中拉出“AddRooms”ajax表单,并将其放在hotelshow.html.erb(这是一个内部业务应用程序)上。令人难以置信的是,如此基本和明显的事情有时会被忽视。
alert('Test creating a room');
var content = $('<%= escape_javascript(render(@room)) %>');
$("#room_list tbody").append(content);