0

什么是'rails way'让每行都有一个带有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' ...>

但是 POSTed 参数不包括 :row 查询参数

我也试过

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

具有相同的结果(包括 row=GUID,但是当用户单击提交按钮时,该参数不会发布到控制器)。

对于如何让多行提交按钮(用户可以看到相同的名称)也可以将行标识符传递给控制器​​,我将不胜感激。

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 回答