Ruby on rails RoR:子提交表单就是创建两个项目

Ruby on rails RoR:子提交表单就是创建两个项目,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在尝试创建包含所有现有机构的索引页。 一个链接,当你点击它时,会显示一个创建新机构的表单 Controller: def index @stablishments = Stablishment.all @new_stablishment = Stablishment.new() end def create @stablishment = Stablishment.new @stablishment.update_attributes(param

我正在尝试创建包含所有现有机构的索引页。 一个链接,当你点击它时,会显示一个创建新机构的表单

Controller:
  def index
    @stablishments = Stablishment.all
    @new_stablishment = Stablishment.new()
  end

  def create
    @stablishment = Stablishment.new
    @stablishment.update_attributes(params[:stablishment])
  end


Index:
Index

<div id="create_stablishment">
  <%= link_to "Crear Nuevo Establecimiento", '#' %>
</div>

<div id="stablishment_form_fields" style="display:none;">
  <%= form_for(@new_stablishment, :remote => true) do |f| %>
    <%= render :partial => 'stablishments/form_fields', :locals => {f: f} %>
  <% end %>
</div>

<div id="stablishments_list">
  <% @stablishments.each_with_index do |stablishment, i| %>
    <%= render stablishment, :count => i %>
  <% end %>
</div>

<div id="mensaje"></div>

form_fields:
<div class="form_fields">
  <%= f.label "Nombre" %>
  <%= f.text_field :name %>
</div>
<div class="form_fields">
  <%= f.label "Ciudad" %>
  <%= f.text_field :city %>
</div>
<div class="form_fields">
  <%= f.label "Estado" %>
  <%= f.text_field :state %>
</div>
<div class="form_fields">
  <%= f.label "Direccion" %>
  <%= f.text_field :address %>
</div>
<div class="form_fields">
  <%= f.label "Email" %>
  <%= f.text_field :mail %>
</div>
<div class="form_fields">
  <%= f.label "Sitio Web" %>
  <%= f.text_field :web_site %>
</div>
<div class="form_fields">
  <%= f.label "Tipo" %>
  <%= f.text_field :stablishment_type %>
</div>
<div class="form_fields">
  <%= f.submit %>
</div>
create.js:
$("#stablishment_form_fields").hide();
$("#mensaje").html("se ha creado");

为什么会发生这种情况?

不要实例化
@stablishment
然后在其上调用
update\u attributes
,只需使用:

def create
  @stablishment = Stablishment.new(params[:stablishment]).save
end

改为创建用户方法:

def create
  @stablishment = Stablishment.create(params[:stablishment])
end

似乎有两个请求被发送。问题可能来自Javascript,因为您使用的是远程表单

form_for(@new_stablishment, :remote => true)
AJAX帖子将自动设置并由rails.js或jquery_ujs.js调用。所以我们不需要手动处理它


为了解决这个问题,您可以在浏览器中显示控制台日志(我想在Firefox中使用Firebug)。如果有两个请求,则表示您的javascript代码中有错误。

谢谢您的两个回答!我认为那不能解决问题,事实上它不起作用。。我尝试了这两种建议,但问题仍然存在。。无论如何,谢谢你!我将继续寻找解决方案。更详细地说,问题不在于我在同一个动作中保存了两个对象或类似的东西,看看这个样子,有两个邮局/机构。我试着在动作中睡10分钟,等了10秒钟,帖子又完成了。。问题就像你在做两次点击!哦,是的,你是对的!我犯了多么愚蠢的错误。在我的资产文件夹中,我有jquery-1.8.1,因此ajax部分由两个javascript文件处理,因此产生了两个请求。
form_for(@new_stablishment, :remote => true)