2013-04-06 78 views
2

我有一个Rails 3.2 ajax表单,为酒店创建一个新房间。新的Room ajax表单在Room index页面上正常工作,但是一旦我在Hotel编辑页面上嵌入了新的Room ajax表单,表单通常会在不使用Ajax的情况下提交。Rails ajax表单不能从另一个提交

要创建新房间的形式,我用的是酒店edit.html.erb页面上以下链接:

<%#= link_to 'Add a Room', new_room_path(:hotel_id => @hotel.id), :remote => true, :class => 'new_room' %> 

这会将下列形式到同一个页面的部分:

<%= 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 %> 

最后,我有我的create.js.erb以下(房间文件夹中):

alert('Test creating a room'); 
var content = $('<%= escape_javascript(render(@room)) %>'); 
$("#room_list tbody").append(content); 

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

为什么表单在单位索引页面上正常工作,但没有在关联的酒店编辑页面上正常工作?

回答

2

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

你应该重新考虑在这里的意见架构。也许你可以在表格之外为酒店提供表格,或者你可以使用fields_foraccepts_nested_attributes_for来编辑儿童物品。

下面是关于如何使用嵌套的属性,一个完整的例子:Nested Attributes Examples

+0

谢谢。我完全忽视了我嵌套的形式。我会拉“添加房间” AJAX形式进行编辑页面,并把它放在酒店show.html.erb(这是一个内部业务应用程序)。某些如此基本和显而易见的事情有时可能被忽视是不可置信的。 – Ryan 2013-04-06 01:06:38

1

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

您可以使用nested attributes直接添加属性的空间形式,这样,当整个表单提交等都是所有的房间...或者使用一个div和一个链接,而不是一种形式,一个提交按钮。

+0

谢谢。这是正确的,但我更喜欢@alfonso的答案,因为它对我稍微有点帮助。 – Ryan 2013-04-06 01:06:15