Rails 4 mehrere Bild oder Datei hochladen mit Carrierwave
Wie kann ich mehrere Bilder hochladen von einer Datei-Auswahl-Fenster mit Schienen 4 und CarrierWave? Ich habe eine post_controller
und post_attachments
Modell. Wie kann ich dies tun?
Kann mir jemand ein Beispiel geben? Gibt es einen einfachen Ansatz, um dieses?
InformationsquelleAutor der Frage SSR | 2014-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zu tun, befolgen Sie einfach diese Schritte.
In gem-Datei
Post erstellen Gerüst
Erstellen post_attachment Gerüst
In der post.rb
In post_attachment.rb
In post_controller.rb
In views/posts/_form.html-Code.erb
Eine Anlage Bearbeiten und die Liste der Anlage für alle post.
In views/posts/zeigen.html-Code.erb
Update-Formular zum Bearbeiten einer Anlage views/post_attachments/_form.html-Code.erb
Ändern, die update-Methode in post_attachment_controller.rb
In rails 3 keine Notwendigkeit zu definieren, die starken Parameter und wie können Sie definieren, attribute_accessible sowohl im Modell als auch accept_nested_attribute zu post Modell, weil-Attribut zugänglich ist veraltet in rails 4.
Für eine Anlage Bearbeiten wir können das nicht ändern, alle Anlagen zu einer Zeit. so ersetzen wir die Anhaftung eins nach dem anderen, oder Sie können ändern, wie pro Ihre Regel, die ich Hier nur zeigen, wie Sie für eine Aktualisierung der Anlage.
InformationsquelleAutor der Antwort SSR
Wenn wir einen Blick auf CarrierWave ist die Dokumentation, diese ist wirklich sehr leicht jetzt.
https://github.com/carrierwaveuploader/carrierwave/blob/master/README.md#multiple-file-uploads
Ich verwende Produkt als Modell möchte ich hinzufügen, dass die Bilder, als Beispiel.
Erhalten die master-Zweig Carrierwave und fügen Sie es zu Ihrem Gemfile:
Erstellen Sie eine Spalte, in die vorgesehene Modell-zu-host ein array von Bildern:
Ausführen der migration
Hinzufügen von Bildern zu Modell Produkt
Bilder hinzufügen, um starke params in ProductsController
Ermöglichen, Ihre form zu akzeptieren mehrere Bilder
In Ihren Ansichten, können Sie die Referenz-Bilder Parsen der Bilder-array:
Wenn Sie wählen Sie mehrere Bilder aus einem Ordner, wird die Bestellung der exakten Reihenfolge, die Sie nehmen von oben nach unten.
InformationsquelleAutor der Antwort drjorgepolanco
Einige kleinere Ergänzungen zu den SSR Antwort:
accepts_nested_attributes_for müssen Sie nicht zum ändern der parent-Objekt als controller. Also, wenn zum richtigen
zu
dann alle diese controller-änderungen wie diese werden redundant:
Ebenfalls sollten Sie
PostAttachment.new
auf das parent-Objekt form:In views/posts/_form.html-Code.erb
Damit wäre überflüssig diese änderung in der übergeordneten Steuerung:
Weitere Infos finden Sie unter Schienen fields_for form nicht auftauchen, verschachtelte form
Wenn Sie Schienen 5, dann ändern
Rails.application.config.active_record.belongs_to_required_by_default
Wert vontrue
zufalse
(im config/- Initialisierungen/new_framework_defaults.rb) durch einen bug in accepts_nested_attributes_for (sonst accepts_nested_attributes_for nicht in der Regel arbeiten unter Rails 5).EDIT 1:
Hinzufügen, über die zerstören:
In models/post.rb
In views/posts/_form.html-Code.erb
Diese Weise können Sie einfach müssen nicht eine Kind-Objekt-controller überhaupt! Ich meine keine
PostAttachmentsController
wird nicht mehr benötigt. Wie für die übergeordneten Objekts controller (PostController
), Sie auch fast nicht ändern - das einzige, was Sie ändern es wird die Liste der auf der Whitelist params (einschließlich der Kind-Objekt-bezogenen params) wie folgt:Deshalb die
accepts_nested_attributes_for
ist so erstaunlich,.InformationsquelleAutor der Antwort prograils
Ich auch herausgefunden, wie Sie das update hochladen mehrerer Dateien und ich habe auch umgestaltet werden, es noch ein wenig. Dieser code ist von mir, aber Sie bekommen die drift.
InformationsquelleAutor der Antwort Chris Habgood
Hier ist meine zweite umgestalten in das Modell:
Controller:
In der Mainboard-Modell:
InformationsquelleAutor der Antwort Chris Habgood
Wenn mit der Verein
@post.post_attachments
Sie nicht brauchen, um diepost_id
.InformationsquelleAutor der Antwort Chris Habgood