2013-10-18 60 views
7

大家好,我正在關注jquery文件上傳的視頻教程http://railscasts.com/episodes/381-jquery-file-upload,我被卡住了。我上傳圖片後,我的渲染局部不刷新,它添加新的圖像和所有其他圖像下已經附加的圖像。因此,如果我將兩個圖像添加到一個新項目中,它會顯示第一個圖像,然後再次使用第一個圖像和第一個圖像渲染第二個圖像,因此共有3張照片。jquery文件上傳在rails 4中

這裏是我的create.js.erb

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

這是我從我的節目頁面呈現。

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

這裏是我的/photos/_photos.html.erb部分

<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> 

這裏是我的照片控制器創建

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

    respond_to do |format| 
     format.js 
    end 
    end 

這裏是我的photos.js.jcoffee

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 + '%') 

任何幫助將g reat,我卡住了。謝謝!


非常感謝你豐富佩克他的答案完全解決了我的問題。我不得不改變

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

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

回答

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 

這是我第一次看它


的修復竟是用$('#photos').html()更換容器。該OP最初使用.append只是將內容附加到容器,它根本不起作用

+1

嗨Rich,感謝您的幫助。我已將respond_添加到我的創建中,並且沒有任何更改。我認爲自從Rental需要響應上面的控制器它可能需要一個,但是當我添加了對出租創建操作的相同響應時,我得到了一個ActionController :: UnknownFormat。任何其他想法? –

+0

好的,所以問題要麼是你的JS沒有正確渲染,要麼你的create.js.erb中有語法錯誤。首先,您應該取出create.js.erb中的所有當前代碼並添加一個簡單的警報(以查看它是否被調用)。你可以調用這樣的警報:'alert('test');' –

+0

嗨,我已經完成了你的建議,並且警報有效,所以這意味着js不能正確渲染。有沒有辦法跟蹤這件事? –