0

各行にsubmit_tagsを含むフォームを作成するための「レールの方法」とは何ですか。submit_tagは、どの行の送信がクリックされたかをコントローラーに通知します。

form_tag内に、私のフォームにはユーザーのリストが表示され、各ユーザーの横には「foo」や「bar」などのいくつかのアクションがあります。

現在、これらのアクションにlink_toを使用しています。これにより、クエリパラメータが追加さ:row => this_row.guidれ、コントローラーがアクションを実行する行を認識できるようになります。それは機能しますが、URLでクエリパラメータを公開するのは好きではありません。また、URLでクエリパラメータを保持する方法も好きではないので、ユーザーが[更新]をクリックすると、アクションが再度実行されます。

表示されている行はすでにフォーム内にあるので、各アクションをsubmit_tagにします。しかし、APIドキュメントから、submit_tagの各インスタンスに異なるクエリパラメータを追加する方法があることはわかりません。

私がこれを試すとき:

= submit_tag "foo", {:row => this_row.guid}
= submit_tag "bar", {:row => this_row.guid}

HTMLは次のようになります<input .... row='SOMEGUID' ...>

ただし、POSTされたパラメータには:rowクエリパラメータは含まれません

私も試しました

= submit_tag "foo", params.merge(:row => this_row.guid)
= submit_tag "bar", params.merge(:row => this_row.guid)

同じ結果になります(row = GUIDが含まれますが、ユーザーが送信ボタンをクリックしたときに、そのパラメーターはコントローラーにPOSTされません)。

送信ボタンの行を多数(ユーザーに同じ名前で表示できるようにする)、行IDをコントローラーに渡す方法についてのヘルプをいただければ幸いです。

4

1 に答える 1

0

送信ボタンの値もパラメーターとして送信されます。ログを確認してください。

アップデート

送信ボタンのデータ属性として行IDを追加します。

= submit_tag "bar", {:data => {:row => this_row.guid}}

次に、送信ボタンをクリックすると、送信される前に行IDがフォームの非表示フィールドとして追加されます。

$('input[type="submit"]').click(function(){
  $('form').append('<input type="hidden" name="row" value="' + $(this).data('row') + '" />');
});
于 2012-09-09T16:54:22.760 に答える