2016-06-05 16 views
1

Ich habe seit drei Wochen auf ein Problem stecken, und obwohl ich jeden Tag versucht habe, eine Antwort auf mein Problem zu finden, habe ich nichts gefunden, dass ich in der Lage gewesen, Arbeit zu machen. Wenn mir jemand helfen könnte, wäre ich sehr, sehr dankbar.Mehrere Bilder hochladen Rails

Ich habe ein grundlegendes Blog in Rails gebaut, das einem Admin-Benutzer ermöglicht, Artikel mit einem Formular zu veröffentlichen, das einen Titel text_field, body text_area und file_field für ein Bild enthält, das Paperclip verwendet. Alles sehr einfach und problemlos und keine Probleme dort. Ich habe jedoch versucht, das Formular zu ändern, damit ein Administrator mehrere Bilder als Teil eines neuen Artikels hochladen kann, aber keine Möglichkeit gefunden habe, dies zu tun.

Ich brauche eine Lösung, mit der ich mehrere Bild-Upload-Funktionen in einem Formular erreichen kann. Ich habe viele Edelsteine ​​und viele Tutorials ausprobiert, konnte aber nichts in meine App integrieren, ohne sie komplett zu zerstören. Kann mir irgendjemand aus dieser Sackgasse helfen, in der ich mich seit drei Wochen wiederfinde? Haben Sie klare Anleitungen oder Lösungen, die mir helfen, dieses Problem zu lösen?

Vielen Dank an alle, die mir helfen können.

+0

http://stackoverflow.com/questions/11605787/uploading-multiple-files-with-paperclip –

+0

http://www.railscook.com/recipes/multiple-files-upload-with-nested-resource-using -paperclip-in-rails/ –

+0

Haben Sie eines der beiden oben gesehen/probiert? –

Antwort

1

Ihre Frage ist ziemlich breit, ohne irgendein Schema oder irgendetwas, also werde ich versuchen, Ihnen so viel wie möglich zu helfen.

Wenn es ein Blog ist, haben Sie möglicherweise ein post Modell. Sie könnten ein photo Modell mit einem Verweis auf das Modell post haben. Wenn Sie Ihrem Modell photo eine Büroklammer hinzufügen, können Sie mehrere Fotos speichern.

Es gibt mehrere Möglichkeiten, dies zu tun. Die erste, an die ich denke, ist verschachtelte Formen mit einem Edelstein wie Kokon zu verwenden.

Die zweite, die ich denke, ist eine Dropzone, die die Fotos mit Ajax hochladen würde.

1

Standardmäßig können Sie mit PaperClip einen Anhang hochladen. Eine saubere Methode, die ich gefunden habe, um dies zu umgehen, besteht jedoch darin, ein anderes Modell zu erstellen, das die Bilder umschließt.

class Article < AR::Base 
    has_many :images 
    accepts_nested_attributes_for :images 
end 

class Image < AR::Base 
    belongs_to :article 
    has_attached_file :filename, styles: { medium: "300x300>", thumb: "100x100>" }, default_url: "/images/:style/missing.png" 
    validates_attachment_content_type :filename, content_type: /\Aimage\/.*\Z/ 
end 

Vergessen Sie nicht, eine Migration ausführen, um die Bilder Tabelle zu erstellen:

rails generate model image article:references 

und

rails generate paperclip image filename 

Dann in Ihrem Artikel/Formular, in dem Sie zunächst das Feld mußten Laden Sie das Bild hoch, Sie hätten

<%= f.fields_for :images do |p| %> 
    <%= p.label :filename %><br> 
    <%= p.file_field :filename%> 
<% end %> 

In Ihrem articles_controller # article_params, zusammen mit den aktuellen Parametern, würden Sie haben params.require(:article).permit(..., images_attributes: [:filename])

Anschließend erlauben die Uploads von mehreren Bildern nur die grundlegenden Kenntnisse von verschachtelten Formularen. Um eine Standardanzahl von file_fields, in Ihrem ArticlesController#new nach der Initialisierung Ihrer Set @article Sie

def new 
    @article = Article.new 
    2.times{ @article.images.build} 
end 

Mit diesem Setup haben würden, wenn Sie zu Ihrem new_articles Route navigieren, sollten Sie Ihre Artikel bereit siehe 2 Bilder hochladen. Um mehr darüber zu erfahren, wie Sie mit NestedForms noch mehr tun können, sollten Sie das Ryan Bates Tutorial sehen. Dieser Ansatz bietet eine sauberere Schnittstelle, da die anderen Ansätze, denke ich, eine Art Hack benötigen würden.

Lassen Sie mich wissen, ob ich helfen kann oder weitere Erläuterungen erforderlich sind.

+0

Hallo, und danke für die ausführliche Antwort. Ich habe Ihre Lösung durchgearbeitet und es gibt mir keine Fehler. Es liefert jedoch keine Bilder für mich, nur leere Arrays. Ich habe eine Büroklammer mit S3 eingerichtet, aber es scheint nicht zu funktionieren. Ich bin mit diesem Projekt buchstäblich am Ende. Es ist mir seit fast vier Wochen nicht möglich, eine gründliche Anleitung zur Umsetzung dieser Funktion zu finden. Viele Leute haben versucht, hilfsbereit zu sein und mir Hinweise zu geben, und ich danke allen, aber wenn ich keine Schritt für Schritt Anleitung finde, fühle ich, dass ich es niemals tun werde. –

+0

Glücklich, ich konnte helfen. Ich würde mich freuen, dich durch zu führen! Wenn das Projekt auf Github läuft, könnte ich helfen, durchzuschauen, um mehr Einblicke zu geben. Oder lassen Sie mich eine andere Methode kennen, die Ihnen entgegenkommt. Github: github.com/andela-oakinnniranye – oreoluwa