1

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

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");

当我单击创建设施时,它正在创建对象。日志:

Started POST "/stablishments" for 127.0.0.1 at 2012-09-15 20:47:05 -0300
Processing by StablishmentsController#create as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"VDf47PuVfNH7UPLEyVqtY4n+2DgmCKT3Jvx2wljMtZY=", "stablishment"=>{"name"=>"6", "city"=>"", "state"=>"", "address"=>"", "mail"=>"", "web_site"=>"", "stablishment_type"=>""}, "commit"=>"Create Stablishment"}
   (0.2ms)  BEGIN
  SQL (0.4ms)  INSERT INTO `stablishments` (`address`, `city`, `created_at`, `mail`, `name`, `phone`, `stablishment_type`, `state`, `updated_at`, `web_site`) VALUES ('', NULL, '2012-09-15 23:47:05', '', '6', NULL, NULL, NULL, '2012-09-15 23:47:05', '')
   (119.6ms)  COMMIT
  Rendered stablishments/create.js.erb (0.8ms)
Completed 200 OK in 176ms (Views: 7.4ms | ActiveRecord: 120.2ms)


Started POST "/stablishments" for 127.0.0.1 at 2012-09-15 20:47:05 -0300
Processing by StablishmentsController#create as JS
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"VDf47PuVfNH7UPLEyVqtY4n+2DgmCKT3Jvx2wljMtZY=", "stablishment"=>{"name"=>"6", "city"=>"", "state"=>"", "address"=>"", "mail"=>"", "web_site"=>"", "stablishment_type"=>""}, "commit"=>"Create Stablishment"}
   (1.0ms)  BEGIN
  SQL (0.4ms)  INSERT INTO `stablishments` (`address`, `city`, `created_at`, `mail`, `name`, `phone`, `stablishment_type`, `state`, `updated_at`, `web_site`) VALUES ('', NULL, '2012-09-15 23:47:05', '', '6', NULL, NULL, NULL, '2012-09-15 23:47:05', '')
   (58.9ms)  COMMIT
  Rendered stablishments/create.js.erb (0.1ms)
Completed 200 OK in 76ms (Views: 10.3ms | ActiveRecord: 60.3ms)

为什么会发生这种情况?

4

3 回答 3

0

而不是实例化@stablishment然后调用update_attributes它,只需使用:

def create
  @stablishment = Stablishment.new(params[:stablishment]).save
end
于 2012-09-16T01:45:38.020 回答
0

用户方法创建代替:

def create
  @stablishment = Stablishment.create(params[:stablishment])
end
于 2012-09-16T01:53:58.680 回答
0

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

form_for(@new_stablishment, :remote => true)

AJAX 帖子将由 rails.js 或 jquery_ujs.js 自动设置和调用。所以我们不需要手动处理它。

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

于 2012-09-16T03:56:30.007 回答