0

重複の可能性:
Ruby on Rails:複数の送信ボタンを異なるメソッドに移動させる方法(おそらくwith_actionを使用しますか?)

フォームにはsubmit_tagsがいくつかあり、サーバー側ではどれがクリックされたかを検出する必要があります。これは私が試したもので、機能していません。サーバー側では、paramsでアクション名のみを取得します。

<%= form_tag controller_action_path(:id => @project.id), :method => :post do %>
    <% if @project_is_synced %>
        <%= submit_tag 'Update synchronization', :name => 'update' %>
        <%= submit_tag 'Stop synchronization', :name => 'stop' %>
    <% else %>
        <%= submit_tag 'Start synchronization', :name => 'start' %>
    <% end %>
<% end %>

params[:action]私は常に同じである現在のアクション名だけを持っています

4

1 に答える 1

1

これをデバッグする最も簡単な方法は、ローカルで実行し、パラメーターが通過するのを確認するか、アクションにパラメーターを記録することです。

 if request.post?
    logger.warn "POST #{params}"

 end

submit_tags に名前を付けたので、デフォルト名の「commit」ではなく、各ボタンに異なる名前が付けられ、「start」、「stop」、または「update」という名前のパラメーターを確認する必要があります。

最も簡単な方法は、名前を削除して params[:commit] でさまざまな値を確認することですが、ビューを変更したくない場合は、これを使用してください (レンダリング コードを明らかに置き換えます)。

  if params[:start]
    render :text => "start"
  elsif params[:update]
    render :text => "update"
  else
    render :text => "stop"
  end

リンクされた投稿の回答へのコメントはこれに対処していますが、なぜ見逃したのかがわかります。

于 2012-10-16T20:27:06.857 に答える