正常使用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"}
由于
答案 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