2

Добрый день. Есть ли какое-нибудь рабочее решение для удаления актива в вложенной форме в Carrierwave?Как удалить актив в nested_form через несущую?

МОДЕЛЬ

has_many :article_images, :dependent => :destroy  
accepts_nested_attributes_for :article_images 

mount_uploader :image, ImageUploader  
belongs_to :article, :polymorphic => true 

schema.rb

create_table "article_images", :force => true do |t| 
t.string "image" 
t.string "article_id" 
end 

create_table "articles", :force => true do |t| 
t.string "title" 
end 

CONTROLLER

def edit 
@article = Article.find(params[:id]) 
@article.article_images.build 
end 

VIEW

_form.html.erb 
<%= f.fields_for :article_images do |article_image| %> 
<% if article_image.object.new_record? %> 
<%= article_image.file_field :image %> 
<% else %> 
<%= image_tag(article_image.object.image.url(:thumb)) %> 
<%= article_image.check_box :remove_image %> #DON'T WORK 
<% end %> 
<% end %> 
+0

[https://github.com/itsNikolay/carrierwave_multiply_files_upload](https://github.com/itsNikolay/carrierwave_multiply_files_upload) Весь код и репо там – itsnikolay

ответ

2

Что произойдет, если добавить это к вашему accepts_nested_attributes_for в вашей модели:

accepts_nested_attributes_for :article_images, :allow_destroy => true 

и изменить это в коде представления:

<%= article_image.check_box :remove_image %> #DON'T WORK 

Для этого:

<%= article_image.check_box :_destroy %> #MIGHT WORK? 
+0

Он работает, но остается после себя пустой папкой. – itsnikolay

+0

люблю вас adam :) для использования nested_for _destroy для удаления объекта;) –

4

Я думаю, что лучше если вы это сделаете:

class ArticleImage < ActiveRecord::Base 
    # ... 
    attr_accessible :remove_image 
    after_save :clean_remove_image 

    def changed? 
    !!(super || remove_image) 
    end 

    def clean_remove_image 
    self.remove_image = nil 
    end 
end 

Это сработало для меня.

+0

На самом деле я столкнулся с аналогичной проблемой со старой версией Mongoid. Только для меня изменился метод переопределения 'changed ?'. Похоже, что вложенный объект не был помечен как грязный, если другое поле в модели также не обновлялось одновременно при попытке удалить изображение. –