图像未删除Carrierwave

时间:2014-08-05 09:24:23

标签: ruby-on-rails ruby ruby-on-rails-4 carrierwave

正常使用Carrierwave进行图片上传,此时用户可以上传图片并指定“'之前”的状态。或者'之后'到图像。

我在删除图片时遇到问题,例如在编辑表单的这一部分

<%= f.fields_for :portfolio_images do |i| %>

 <% if i.object.status == 'Before' %>  
   <div class="form-group">
     <%= i.label 'Before' %><br>
     <%= image_tag(i.object.image_url(:thumb)) %><br>
     <label>
       <%= i.check_box :remove_image %>
       Remove Image
     </label>
   </div>
 <% end %>
<% end %>

将显示状态为Before的图像,但单击复选框以删除图像时图像仍然存在。我已将remove_image添加到我允许的参数中,因此不确定此处还有什么操作

def portfolio_params
 params.require(:portfolio).permit(:id, :title, :description, portfolio_images_attributes:[:id, :portfolio_id, :image, :status, :image_cache, :remove_image])
end

以下是传递的参数

Parameters: {"utf8"=>"✓", "authenticity_token"=>"WDRAWPkQoIF2OkFk8gZpN5niUs3+PcpDRsJ/DvQ0JMk=", "portfolio"=>{"title"=>"Garden Lawn", "description"=>"Lorem Ipsum", "portfolio_images_attributes"=>{"0"=>{"remove_image"=>"1", "id"=>"1"}, "1"=>{"remove_image"=>"0", "id"=>"2"}}}, "commit"=>"Submit", "id"=>"6"}

由于

1 个答案:

答案 0 :(得分:3)

CarrierWave要求您在portfolio_image_attributes中添加以下内容:

:_destroy

添加后,您需要更新复选框以引用该属性。我不确定你是否创建了&#34;:remove_image&#34;你自己,但我认为没必要。

我添加了一个复选框(实际上,在我的应用中它是一个隐藏的字段),如下所示:

<%= f.hidden_field :_destroy %> #(Where f references my portfolio_image, NOT my portfolio)

然后,在点击X(引用我的hidden_​​field)并提交表单后,图像将被删除。请记住,如果图像上传器与父模型具有has_many关系,则需要将allow_destroy:true添加到accepts_nested_attributes。否则,它将不允许您从父窗体中销毁图像。

portfolio.rb:

has_many :portfolio_images, dependent: :destroy
accepts_nested_attributes_for :portfolio_images, allow_destroy: true