Javascript Rails-远程销毁方法不呈现部分视图:NoMethodError未定义的方法'id';拍照
尝试远程删除视图中的图像时,我遇到以下错误:Javascript Rails-远程销毁方法不呈现部分视图:NoMethodError未定义的方法'id';拍照,javascript,ruby-on-rails,ajax,destroy,Javascript,Ruby On Rails,Ajax,Destroy,尝试远程删除视图中的图像时,我遇到以下错误: NoMethodError (undefined method `id' for #<Photo::ActiveRecord_Associations_CollectionProxy:0x007fa826898200>): app/views/photos/destroy.js.erb:1:in `_app_views_photos_destroy_js_erb__997641922821004789_70180135669200'
NoMethodError (undefined method `id' for #<Photo::ActiveRecord_Associations_CollectionProxy:0x007fa826898200>):
app/views/photos/destroy.js.erb:1:in `_app_views_photos_destroy_js_erb__997641922821004789_70180135669200'
app/controllers/photos_controller.rb:31:in `destroy'
还有我的朋友:
$("#photo-<%= @photo.id %>").html("<%= escape_javascript(render('photos/showpics')) %>");
$(“#photo-”).html(“”);
部分观点是:
<div class="row">
<% @photo.each do |photo| %>
<li id="photo-<%= photo.id %>">
<div class="col-sm-6 col-md-4">
<div class="thumbnail" >
<%= image_tag photo.image_url(:thumb) if photo.image? %>
<div class="caption">
<%= photo.title %>
<p><a href="#" class="btn btn-primary" role="button"><%= link_to 'Remove', delete_photo_path(photo), method: :delete, remote: true %></a></p>
</div>
</div>
</div>
</li>
<% end %>
</div>
在我看来,部分视图中的@photo
没有链接,因为在destroy
方法中缺少更好的destroy术语。现在我考虑一下,该方法中的@photo
是否可以传递给javascript?或者最好的方法是什么?根据评论更新。
看看你做了什么:
您的@photo
是一个photo::ActiveRecord\u Associations\u CollectionProxy,您正在分配@项目的位置调用。photos
为了得到你的部分作品,你需要得到你删除对象的id。这是:
$("#photo-<%= @photo_destroy.id %>").html("<%= j render 'photos/showpics', {photos: @photo} ) %>");
$(“#photo-”).html(“”);
您还需要更新部分文件:
#看看那些照片,当我们在j render'photos/showpics'中渲染它时,它来自本地,{photos:@photo}
这应该管用 我最后做的是为
showpics
部分中的行
类分配一个id:
更改javascript:
$("#photo-<%= @photo.id %>").html("<%= escape_javascript(render('photos/showpics')) %>");
$(“#照片行”).html(“”);
现在,当其中一张照片被删除时,所有照片都得到了正确更新。感谢所有其他人的帮助。严格来说,这是可行的,但我正在尝试呈现整个
showpics
部分。这将用前一张图片替换最后一张已删除的图片,从而生成两张相同的图片,直到用户刷新编辑照片
部分。有什么线索可以帮我解决吗?你是说你的翻唱部分不正常?我理解这个问题。我应该写另一个答案吗?请把你的问题包括你的回溯——把它们放在评论里很难读,而且它们也不能保证留下来。谢谢
<div class="row">
<% photos.each do |photo| %> # look at that photos, it comes from the local when we render it in j render 'photos/showpics', {photos: @photo}
<li id="photo-<%= photo.id %>">
....