观点:_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] ==“另存为新”并尝试调用另一个动作,但我不确定我是否可以这样做。我应该如何更新我的控制器以使其工作。
非常感谢。
答案 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>