1

浏览量:_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 %>

编辑.html.erb

<%= render 'form' %>

在我的产品控制器中,我通常定义了所有新的、创建、编辑和更新操作。

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

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

万分感谢。

4

2 回答 2

3

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

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

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

于 2013-07-30T10:33:46.447 回答
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>
于 2013-07-30T10:32:07.157 回答