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 %>
嗨Rich,感謝您的幫助。我已將respond_添加到我的創建中,並且沒有任何更改。我認爲自從Rental需要響應上面的控制器它可能需要一個,但是當我添加了對出租創建操作的相同響應時,我得到了一個ActionController :: UnknownFormat。任何其他想法? –
好的,所以問題要麼是你的JS沒有正確渲染,要麼你的create.js.erb中有語法錯誤。首先,您應該取出create.js.erb中的所有當前代碼並添加一個簡單的警報(以查看它是否被調用)。你可以調用這樣的警報:'alert('test');' –
嗨,我已經完成了你的建議,並且警報有效,所以這意味着js不能正確渲染。有沒有辦法跟蹤這件事? –