2013-10-18 14 views
7

Herkese merhaba ben Jörgör Dosya Yükleme için http://railscasts.com/episodes/381-jquery-file-upload video eğitimini takip ediyorum ve takılıyorum. Görüntüleri yükledikten sonra renderim kısmi yenilenmez, yeni görüntüyü ve tüm diğer görüntüleri zaten eklenmiş olan resmin altına ekler. Bu yüzden, yeni bir öğeye iki resim eklerseniz, ilk görüntüyü gösterir, sonra ilk görüntü ile kısmi tekrar ilk resmi ve ikinci görüntüyü oluşturur, böylece toplamda 3 fotoğraf vardır.JQuery dosyası yükleme rayları 4

İşte benim şovum sayfasından işlemek benim create.js.erb İşte

<% if @photo.new_record? %> 
    alert("Failed to upload photo: <%= j @photo.errors.full_messages.join(', ').html_safe %>"); 
<% else %> 
    $("#photos").append("<%=j render @photo %>"); 
<% end %> 

olduğunu. İşte

<div id="photos"> 
    <%= render 'photos/photo' %> 
</div> 

benim Fotoğraflar Kontrolör oluşturmak olduğunu Burada

<h2>Images</h2> 
<div class="photo"> 
<% @rental.photos.each do |photo| %> 
    <p> 
    <strong>Photo:</strong> 
    <%= image_tag photo.image_url.to_s %> 
    </script> 
    </p> 
<% end %> 
</div> 

kısmi benim /photos/_photos.html.erb İşte

def create 
    @rental = Rental.find(params[:rental_id]) 
    @photo = @rental.photos.create(params[:photo].permit(:image)) 

    respond_to do |format| 
     format.js 
    end 
    end 

benim photos.js.jcoffee

olduğunu
jQuery -> 
    $('#new_photo').fileupload(replaceFileInput: false, 
    paramName: 'photo[image]') 


    dataType: "script" 
    add: (e, data) -> 
     types = /(\.|\/)(gif|jpe?g|png)$/i 
     file = data.files[0] 
     if types.test(file.type) || types.test(file.name) 
     data.context = $(tmpl("template-upload", file)) 
     $('#new_photo').append(data.context) 
     data.submit() 
     else 
     alert("#{file.name} is not a gif, jpeg, or png image file") 
    progress: (e, data) -> 
     if data.context 
     progress = parseInt(data.loaded/data.total * 100, 10) 
     data.context.find('.bar').css('width', progress + '%') 

Herhangi bir yardım g olur reat, sıkıştım. Teşekkürler!


Zengin Peck'in cevabını tamamen çözdüğünüz için çok teşekkür ederim. Ben


düzeltme kabını değiştirmek için $('#photos').html() kullanmak aslında benim ilk göz var

<% if @photo.new_record? %> 
    alert("Failed to upload photo: <%= j @photo.errors.full_messages.join(', ').html_safe %>"); 
<% else %> 
    $("#photos").html("<%=j render @photo %>"); 
<% end %> 

cevap

2
def create 
    @rental = Rental.find(params[:rental_id]) 
    @photo = @rental.photos.create(params[:photo].permit(:image)) 

    respond_to do |format| 
     format.js 
    end 
end 

için

<% if @photo.new_record? %> 
    alert("Failed to upload photo: <%= j @photo.errors.full_messages.join(', ').html_safe %>"); 
<% else %> 
    $("#photos").append("<%=j render @photo %>"); 
<% end %> 

değiştirmek zorunda kaldı. OP,

+1

Merhaba Zengin, çok iyi çalışmayan kapsayıcıya içerik eklemek için başlangıçta .append kullanıyordu. Oluşturmamıza response_to [değiştir] özelliğini ekledim ve değişiklik yapmam. Kiralama için ihtiyaç duyacağı kadar kontrolöre ihtiyaç duyduğunu düşündüğümden bu yana ihtiyacım olabileceğini düşündüm ama aynı eylemi kirala eylemine eklediğimde ActionController :: UnknownFormat aldım. Diğer Fikirler? –

+0

Tamam, sorun ya JS'nizin düzgün bir şekilde işlenmemiş olması ya da create.js.erb dosyasında sözdizimi hataları var demektir. Öncelikle, geçerli tüm kodu create.js.erb 'inizden almalı ve basit bir uyarı eklemelisiniz (çağrılıp çağrılmadığını görmek için). Böyle bir uyarıyı çağırabilirsiniz: 'uyarı ('test');' –

+0

Hey zengin, önerdiğin şeyi yaptım ve uyarılar işe yaradı, bu yüzden js düzgün bir şekilde işlenmiyor demektir. Bunu takip etmenin bir yolu var mı? –

İlgili konular