2012-09-10 12 views
9

Birden çok resim eklemek için post oluştururken bir sayfada yetenek kazanmak için jQuery-File-Upload ve Carrierwave veya Dragonfly kullanarak bir çözüm olmadığını anladım. Ben birçok görüntü ile bir model iki Post ettik. Ekledikten hemen sonra resim yüklemek istiyorum ve tüm yeni Gönderiyi kaydetmeden önce iptal etme seçeneğim var. Kodum çalışmıyor, ben de buraya yapıştırmadım, belki birisinin örneği var, bu konseptin jQuery-File-Upload ile mümkün olup olmadığı nedir? Birden fazla fotoğraf kaydetmek ve önyükleme görünümünü tutmak için başka yol olmazsa? Beklenen işlevselliğe benzeyen ama Upladify: FormFly ya da sadece Carrierwave ve nested_form: carrierwave-nested_form ile güzel örnekleri buldum. JQuery-File-Upload git wiki'da, sadece Rails'deki bir modelin nasıl kullanılacağı öğretilir.Posta oluştururken bir sayfaya birden çok görüntü yüklemek için JQuery-File-Upload nasıl kullanılır?

Böyle bir şey olsun istiyorum: enter image description here

+1

Sizinkiyle çok benzer bir uygulamada aynı sorunu yaşıyorum. Bu soruya biraz ipucu verebilirsiniz: http://stackoverflow.com/questions/9357607/rails-3-jquery-file-upload-nested-model –

cevap

11

tüm bunlarla baş sorun soru olan "İnsan nasıl mevcut olmayan bir nesne ile bir ilişki oluşturabilir?". Eh, yapamazsın. Yapabileceğin en iyi şey, en iyi şey. Size 3 basit adımda bunu nasıl yapacağınızı göstereceğim. İşlemin kendisinin oldukça açık olması ve çeşitli yaklaşımlar için uygulanabilir olması (jQuery-File-Upload ve Carrierwave veya Dragonfly ile sınırlı olmamak kaydıyla) gibi herhangi bir kodun kasıtlı olarak yayınlanmamasını sağladım.

Aşama 1

Kur, bağımsız bir şekilde, normal olarak bir ilişki her bölümü. Yeni bir gönderi oluşturmak için bir iskele (veya her neyse) kullanın. Gönderi formunun hemen altında, fotoğraf yükleme çözümünüzü normal şekilde uygulayın. Her nesnenin kendi kontrolörlerini ve kısmi hallerini, normal olarak, bu malzemelerin birlikte silinmeden karışmasını önlemek için kullanırdım. Henüz ilişki ilişki kodu hakkında endişelenmeyin.

Adım 2

sizin modellerine ilişkinizin kodu ekleyin. Arayüzün onları henüz uygun şekilde ilişkilendirmediğinden endişelenmeyin.

Adım 3(eğlenceli kısım)

Şimdi, her şeyi bir arada kravat. Oluşturulan resimlerimiz var, ancak herhangi bir gönderiye ait değiller. Ayrıca görüntülerinin hiçbiri olmadan oluşturulmuş yayınlarımız var. Bu ilişkiyi tamamlamanın bir yoluna ihtiyacımız var. Çözüm oldukça basittir. Gönderi ile ilişkilendirilecek görüntülerin kimliklerini içermek için postalar formunda gizli bir metin alanı oluşturmanız gerekir. Ardından, görüntü oluşturma yanıtınız, yeni görüntünün kimliğini metin alanına ekleyerek yeni görüntüyü sayfaya eklediğinizde ekleyin.Benzer şekilde, post denetleyicide, gizli alandaki kimlikleri basitçe döngü ve kaydetmeden önce hedef nesneyi (ler) ilişkilendirin. Görüntüyü sayfadan kaldırıldığında diziden kimliği kaldırmak gibi, iptal düğmesine benzer mantığı eklemek isteyebilirsiniz. Ayrıca, bir gönderiyle ilişkilendirilmemiş belirli bir yaştan sonra görüntüyü temizlemek için zamanlanmış bir görev eklemek isteyebilirsiniz.

+0

Ben o kadar anlayamıyorum… Birbirine gömülmüş bir görüntü modelini tanımladığınızda (burada diyelim, yazı), hepsi aynı anda yaratılır. JQfileUpload, yüklenen her dosya için URL'yi çağırdığı gibi aynı şekilde tetiklenmez; ama bunun üzerinden geçilmesi mümkün olmazdı (jsut, yaratılacak tek bir post model için form aracılığıyla gönderilen birçok dosya ile bir kere url çağrısı yapar), yani 'normal' rayların iç içe geçmiş model davranışına geri dönülmesi anlamına mı geliyor? – Ben

+0

Bu, özellikle senkronize olmayan görüntü yüklemelerine adres verir. Eğer süreciniz bunu gerektirmiyorsa, o zaman evet, geleneksel bir yuvalanmış uygulamanın bazı avantajları olacaktır (yine de, bazı potansiyel olumsuzluklar da olsa). –

+0

Evet, ama ekli görüntüler içeren bir gönderiyi aynı anda mı oluşturmak istersem? – Ben

3

Ben carrierwave ile raylar içinde JqueryFileUpload ile multible resimleri yükleyerek küçük bir örnek buldum.

JqueryFileUpload ile birden çok dosya yükleme işlemini daha iyi hale getirmek için şu anda daha iyi bir çözüm üzerinde çalıştım ancak bu konu o kadar kolay değil. Eğer resim/yeni görünümde bir yazı için bir form uygulayabilirsiniz pictures_controller yeni eylem yeni yazılan nesnesinin bir örneğini oluştururken dize :

In this example

gövdeli bir post iskele oluşturun.

<%= form_for(@post) do |f| %> 
    <div class="field"> 
    <%= f.label :body %><br /> 
    <%= f.text_field :body %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 
+0

Bu örneği gördüm ama benim için bu ebeveyn yazısıyla uyuşmuyor modeli. Yeni anlayış için teşekkürler. – roza

+2

Merhaba roza, nasıl çözdüğümü size göstermek için bootrap-uploader repo'yu çatallandırdım. https://github.com/bulleric/bootstrap_uploader adresine bakın. Bir gönderi oluşturmanız gerekiyor, daha sonra gönderiler görünümünde resim yükleyebilirsiniz (gönderiler/1) önemli bir geçerli posta kimliğine ihtiyacınız var. Aynı anda resim yüklemek istiyorsanız önce postayı kaydetmelisiniz. Veritabanında kayıtlı olmayan bir ilişki kaydedemezsiniz. Benim uygulamada sadece resimleri kaydetmek için bir yükleme iskele oluşturmak. Yükleme tamamlandığında, resimlerde post_id öğesini kaydedecek bir onaylama yöntemini çağırırım. – bulleric

+0

Tamam, [FormFly] 'de (https://github.com/rdetert/FormFly) bu, senkronize olmayan bir şekilde yapıldığı halde, jQuery-File-Upload ile aynı adımda resim eklenmesi imkansız olabilir veya belki de çözüm olduğunu düşündüm. çok zor. Bir sonraki adımda oluşturulmuş gönderiden sonra nasıl fotoğraf ekleyeceğimi biliyorum, bir sayfada bu tamamen bir çıkmaz. Hala soru açıldım, ama sizin katkılarınız için teşekkür ederim. – roza

İlgili konular