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 %>

edit.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 に答える