5

私のフォーム:

<%= semantic_form_for(@campaign) do |f| %>
...
  <%= f.actions do %>
    <%= f.action :submit, label: "Save"%>
    <%= f.action :submit, label: "Save & New" %>
    <%= f.action :cancel, label: "Cancel"%>
  <% end %>
<% end %>

campaign_controller.rbの関数:

  def save_and_new
    print 'SAVE_AND_NEW'
    @campaign = Campaign.find(params[:id])

    respond_to do |format|
      if @campaign.update_attributes(params[:campaign])
        format.html { redirect_to new_campaign_path, notice: 'Campaign was successfully usaved.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @campaign.errors, status: :unprocessable_entity }
      end
    end
  end

Routes.rb:

  resources :campaigns do 
    member do
      post 'save_and_new'
    end
  end

機能に応じたルート:

save_and_new_campaign POST   /campaigns/:id/save_and_new(.:format) campaigns#save_and_new

そして、私が理解していない唯一のことは、関数を呼び出すために実際に何を書くかということです。

4

1 に答える 1

2

アクションで何をしようとしているのか正確にはわかりませsave_and_newんが、トリガーしない理由はわかります。

デフォルトでは、 を使用して formtastic で作成しているフォームは、新しいレコードのアクションと既存のレコードのアクションsemantic_form_forをヒットする RESTful 規則を使用します。最初の送信ボタン (「保存」というラベルの付いたボタン) で/アクションを正常に押したが、2 番目の「保存 & 新規」ボタンで何か別のことをしたい場合は、コントローラで forkの値を確認する必要があります。提出物の取り扱い。おそらく、いくつかのコードはより明確になるでしょう。既存のレコードを更新するために提出を行っているとしましょう:createupdatecreateupdateparams[:commit]

def create
  if params[:commit] == "Save"
    # code for handling "Save" scenario
  else
    # code for handling "Save & New" scenario, perhaps even directly call:
    save_and_new
  end
end


def update
  if params[:commit] == "Save"
    # code for handling "Save" scenario
  else
    # code for handling "Save & New" scenario, perhaps even directly call:
    save_and_new
  end
end

繰り返しますが、アクションで何を達成しようとしているのかは明確ではありません。save_and_newその仮定に疑問を投げかけると、より良い設計への道が開かれる可能性がありますが、差し迫った質問に答えるために: params[:commit]increateまたはの値を確認するupdate必要があります。正しいトラック。

于 2012-04-26T19:32:15.477 に答える