前段时间我问过如何select multiple page elements and perform an action on them。
我实施了它,效果很好。现在我面临另一个问题:如何为这些元素进行多项操作?
我的观点看起来就是这样:
<%= form_for :album_slides_multi, method: :delete, id: 'multi-select' do |f| %>
<%= f.submit "Delete selected" %>
...
<% @slides.each do |slide| %>
<tr>
<td><%= check_box_tag "ids[]", slide.id, false, class: "multi-delete" %></td>
所以我有复选框和名为“删除已选中”的提交按钮。 我希望旁边还有另一个按钮 - “移动到另一张专辑”。
我的控制器将使用:update
方法而不是:delete
,所以我认为form_for ... method: :delete
不是我在这里可以使用的。
答案 0 :(得分:1)
您目前有一个发布到destroy
操作的表单按钮。您正在向params
操作提交表单数据(destroy
,其中包含已检查模型的ID),该操作可以通过表单收集和提交的数据执行您想要的任何操作。您要求的是需要另一个按钮(或提交表单的某种方式)指向另一个操作(在您的情况下,看起来您想要使用update
),但您不能直接执行此操作,因为表单决定使用什么动作,而不是按钮。那你该怎么办?
你真正想要的是什么:
答案是让表单发布到您选择的操作(可能是您创建的自定义操作,因为在您的情况下,将其称为destroy
或update
是有意义的)。
怎么做:
为简单起见,只需更改表单即可使用update
操作而不是destroy
操作(因为它更有意义)
<%= form_for :album_slides_multi, method: :update, id: 'multi-select' do |f| %>
单独保留提交/删除按钮:
<%= f.submit "Delete selected" %>
为您的“另一张专辑”添加新标签。功能按钮:
<%= f.submit "Move selected" %>
以上标签为您提供了如下所示的html:
<input type="submit" value="Delete selected" name="commit" />
<input type="submit" value="Move selected" name="commit" />
然后,在您的控制器中,让您的更新操作如下所示:
def update
if params[:commit] == "Delete selected"
# your current delete logic
elsif params[:commit] == "Move selected"
# your desired move logic
end
更多信息:
当您点击Move selected
按钮时,update
操作将会触发,您将进入params[:commit] == "Move selected"
部分,因为该按钮的值为&#34;移动已选择&# 34;并且该值与其他参数一起提交,名称为#34; commit&#34;。
如果它更有意义,请随意创建一个名为update
更合适的新动作。我不知道如何在这里详细说明如何做到这一点,因为有很多资源解释如何做到这一点,但使用上面的更新操作来完成你想要的东西应该教你学习的东西。
这称为多按钮形式,并在Rails Cast #38中介绍,但该剧集是从2007年开始的,确切的语法可能会在某些地方显示日期。
答案 1 :(得分:1)
如果您有两个表单,并且希望第一个中的复选框操作在第二个表单中进行镜像,则可以执行以下操作:
<强> Fiddle 强>
$(document).ready(function(){
$('#foo_form input:checkbox').change(function(){
$('#bar_' + this.id.replace('foo_', '')).prop('checked', this.checked);
});
});
答案 2 :(得分:1)
实际上,根据点击的按钮(或按下回车键)更改表单操作的最简单方法是这样的:
<form id="form" action="form_1" method="post">
<button data-action="form_2">button1</button>
<button data-action="form_3">button2</button>
<button data-action="form_4">button3</button>
</form>
<script>
$(document).ready(function(e) {
$('button').click(function(e) {
$('#form').attr('action',$(this).attr('data-action'));
});
});
</script>