为了从我的对象中删除(回形针)图像,我定义了一个自定义回调(和路由):
ActiveAdmin.register Camping do
#...
member_action :destroy_image, :method => :delete do
camping = Camping.find(params[:id])
camping.image.destroy
redirect_to({:action => :show}, :notice => "Image deleted")
end
end这与预期的一样;通过命名路由destroy_image_admin_camping => /admin/campings/:id/destroy_image。
问题是我找不到如何将其添加到表单中:
ActiveAdmin.register Camping do
form do |f|
f.inputs "Camping" do
f.input :name
f.input :image
f.action :delete_image, :url => destroy_image_admin_camping_path(@camping.id), :button_html => { :method => :delete }
f.input :description
end
f.actions
end
#...
end更详细:我不知道如何将“我们正在编辑的当前项的id”传递到destroy_image_admin_camping_path中;@camping为空,f.camping未定义,因此我不知道如何在其中传递项。
这是正确的方法吗?我更喜欢这种“ajax式”的界面,而不是更常见的“更新时删除图像的复选框”,但我不确定这是否会起作用。
发布于 2013-03-09 09:25:10
这里有几个问题,我将尝试解决所有这些问题。
如何访问“我们正在编辑的当前项目的id”
您在寻找f.camping方面已经很接近了。您需要的是f.object,所以:
destroy_image_admin_camping_path(f.object.id)。
注意:当f.object.id是一个新表单(而不是编辑表单)时,它将是nil,你需要用unless f.object.new_record?来检查它
:“这是正确的方法吗?”
我不确定,真的。对我来说,在不实际保存当前呈现的表单的情况下发出请求可能会造成复杂性,但它可能会成为更好的界面。无论如何,如果你想在更新时使用checkbox-that-deletes-images on-update,这应该会对你有所帮助:Rails Paperclip how to delete attachment?。
但是,如果您希望使用ajax式的方法,我认为您会希望使用一个样式为按钮的<a>标记。实际使用按钮的问题是您不想提交表单。
下面是一个例子:
f.inputs do
link_to 'Delete Image', delete_image_admin_camping_path(f.object.id), class: 'button', remote: true, method: :delete
endremote: true将使其成为ajax请求,并且ActiveAdmin为<a>标记提供了一个非常合理的按钮类。基于成功/失败的界面更新留给读者作为练习。
此外,您可能希望使用erb模板来代替Active Admin DSL (请参阅底部的http://activeadmin.info/docs/5-forms.html )。
如下所示:
# app/views/admin/campings/_form.html.erb
<%= semantic_form_for [:admin, @post] do |f| %>
<%= f.inputs do %>
<%= f.input :name %>
<%= f.input :image %>
<%# Actually, you might want to check for presence of the image, I don't know Paperclip well enough to demonstrate that though %>
<% unless f.object.new_record? %>
<%= image_tag f.object.image_url %>
<%= link_to 'Delete Image', delete_image_admin_camping_path(f.object.id), class: 'button', remote: true, method: :delete %>
<% end %>
...
<% end %>
<%= f.actions %>
<% end %>https://stackoverflow.com/questions/13806774
复制相似问题