我使用Railscast第198集创建了一个表单,允许我使用复选框单独编辑多个对象。我希望能够在选中我想要更改的项目框后选择“编辑”或“删除”操作。我已将此添加到我的photos_controller.rb中以进行编辑操作:
def edit_individual
@photos = Photo.find(params[:photo_ids])
end
def update_individual
@user = current_user
@photos = Photo.update(params[:photos].keys, params[:photos].values).reject { |p| p.errors.empty? }
if @photos.empty?
flash[:notice] = "Products updated"
redirect_to photos_url
else
render :action => "edit_individual"
end
end
在我看来,当我遍历每张照片以显示它时,我正在添加这行代码:
<%= form_tag edit_individual_photos_path, :method => "get" do %>
... #loop through all photos and add a checkbox
<%= check_box_tag "photo_ids[]", photo.id %>
<%= submit_tag "Edit", :class => "btn btn-large btn-inverse" %>
这很好用,但是我无法弄清楚如何在表单中添加另一个提交标签来删除所选项目,而不是仅仅编辑它们。有谁知道如何将photo_ids数组作为参数传递并销毁它们?
答案 0 :(得分:1)
重复How do I create multiple submit buttons for the same form in Rails?的问题。
唯一的区别是,在该问题中,他们使用的是form_for
和f.submit
而不是form_tag
和submit_tag
,但它应该很容易理解。您的按钮的值将是“编辑”和“删除”而不是“A”和“B”。
答案 1 :(得分:1)
在Ashitaka的帮助下,我想出了我的控制器中的删除操作。编辑/更新是默认操作,所以我只需要特定点击按钮是&#34;删除&#34;。
在photos_controller.rb中:
def edit_individual
...
if params[:commit] == 'Delete'
@photos = Photo.find(params[:photo_ids])
@photos.each { |photo|
photo.remove_image!
Photo.destroy(photo.id) }
redirect_to photos_new_path
end
end
在视图中:
<%= form_tag edit_individual_photos_path do %>
...#loop through all of the photos and add checkbox
<%= check_box_tag "photo_ids[]", photo.id %>
#two submit buttons for the different actions
<%= submit_tag "Edit", :class => "btn btn-large btn-inverse" %>
<%= submit_tag "Delete", :class => "btn btn-large btn-danger" %>
<% end %>