在编辑操作中另存为新记录

时间:2013-07-30 10:24:33

标签: ruby-on-rails ruby-on-rails-3

观点:_form.html.erb

<%= form_for(@product) do |f| %>
   <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :price %><br />
    <%= f.number_field :price %>
  </div>
  <div class="actions">
    <%= f.submit "Save" %>
    <% if params[:action] == "edit" %>
      <% f.submit "Save As New" %>
    <% end %> 
  </div>
<% end %>

edit.html.erb

<%= render 'form' %>

在我的产品控制器中,我拥有所有新的,创建,编辑和放大器。更新通常定义的动作。

问题:此表单更新工作正常,但我有一个名为“另存为新”的新提交按钮,当用户点击时,无论如何都可以在编辑产品页面内调用创建操作在那。

我知道有可能使用条件并检查params [:commit] ==“另存为新”并尝试调用另一个动作,但我不确定我是否可以这样做。我应该如何更新我的控制器以使其工作。

非常感谢。

2 个答案:

答案 0 :(得分:3)

您可以像这样更改更新操作:

if params[:commit]=="Save As New"
  @product = Product.create(params[:product])
else
  @product.update_attributes(params[:product])
end
redirect_to @product

所以你不需要新的动作并且可以在不添加路线的情况下处理它......

答案 1 :(得分:2)

如果我理解正确,您希望用户能够在编辑页面内部创建新记录,对吧?

如果是这种情况,我认为你可以这样做:

<div class="actions">
    <%= f.submit "Save" %>
    <% if params[:action] == "edit" %>
      <%= link_to "Save As New", {controller: 'products', 
                  action: 'new'
                  },
                  class: "if there's a css class"} %>

    <% end %> 
</div>