2

Guten Tag. Hat jemand Arbeit Lösung zum Löschen von Asset in verschachtelter Form in Carrierwave?Wie lösche Asset in nested_form durch carrierwave?

MODEL

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) Alle Code und Repo dort – itsnikolay

Antwort

2

Was ist, wenn Sie in Ihrem Modell fügen Sie diese zu Ihrer accepts_nested_attributes_for passiert:

accepts_nested_attributes_for :article_images, :allow_destroy => true 

und diesen Code in der Ansicht ändern:

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

Um dies:

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

Es funktioniert, aber bleiben Sie nach sich selbst ein leerer Ordner. – itsnikolay

+0

Liebe für dich Adam :) für die Verwendung von nested_for_destroy zu Objekt zu zerstören;) –

4

Ich denke, es ist besser, Wenn Sie dies tun:

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 

Es hat für mich funktioniert.

+0

Ich stieß tatsächlich auf ein ähnliches Problem mit einer älteren Version von Mongoid. Nur die 'overchanged' Methode Override funktionierte für mich. Es sah so aus, als ob das verschachtelte Objekt nicht als schmutzig markiert wurde, es sei denn, ein anderes Feld im Modell wurde gleichzeitig aktualisiert, während versucht wurde, ein Bild zu entfernen. –