【问题标题】:Rails: ActiveRecord::RecordNotFound Couldn't find Photo without an IDRails:ActiveRecord::RecordNotFound 找不到没有 ID 的照片
【发布时间】:2018-09-28 12:33:34
【问题描述】:

我有两个模型,服务和照片。在服务模式下,belongs_to :user 和 has_many :photos 和 has_many_attached :images。

根据照片模型 belongs_to :service

在照片查看器下,我尝试显示与每个服务关联的图像。

当我尝试删除图像时,我收到了一个无法找到带有 ID 错误的图像。

查看器如下所示:

<% if @service.images.attached? %>
<br/><br/>

<div class="row">
  <% @service.images.each do |image| %>
    <div class="col-md-4">
      <div class="panel panel-default">
        <div class="panel-heading preview">
          <%= image_tag image %>
        </div>
        <div class="panel-body">
          <span class="pull-right">
            <%= link_to service_photo_path(@photos, image), remote: true, method: 'delete', data: {confirm: "Are you sure?"} do %>
              <i class="fa fa-trash-o" aria-hidden="true"></i>
            <% end %>
          </span>
        </div>
      </div>
    </div>
  <% end %>
</div>
<% end %>

照片控制器如下所示:

class PhotosController < ApplicationController

  def create
    @service = Service.find(params[:service_id])

    if params[:images]
      params[:images].each do |img|
        @service.photos.create(image: img)
    end

    @photos = @service.photos
    redirect_back(fallback_location: request.referer, notice: "Saved...")
  end
end

  def destroy
    @photo = Photo.find(params[:_id])
    service = @photo.service

    @photo.destroy
    @photos = Photo.where(service_id: service_id)

    respond_to :js
  end
end

路线:

service_photos POST /services/:service_id/photos(.:format)photos#create 
service_photo DELETE /services/:service_id/photos/:id(.:format) photos#destroy

【问题讨论】:

  • 您能否运行rake routes 并向我们展示这些模型的相关路线?
  • service_photos POST /services/:service_id/photos(.:format)photos#create service_photo DELETE /services/:service_id/photos/:id(.:format) photos#destroy
  • 如我所料,您应该使用params[:id] 而不是params[:_id] 请参阅下面的答案部分中的答案,如果对您有帮助,请将其标记为正确:)

标签: ruby-on-rails paperclip rails-activestorage


【解决方案1】:

替换

@photo = Photo.find(params[:_id])

与:

@photo = Photo.find(params[:id])

我认为你有错字! id 不是_id


另外,在您看来替换:

service_photo_path(@photos, image)

与:

service_photo_path(@service, photo)

【讨论】:

  • 现在错误变为 ActiveRecord::RecordNotFound (Couldn't find Photo with 'id'=10)
  • @klasarn,我已经通过其他更改更新了答案:) 请关注并反馈!
  • 您需要弄清楚如何获得photo .. 您正在混合使用photosimages
  • 当我使用照片而不是图像时,我收到错误“未定义的局部变量或方法”。我知道我正在混合使用照片和图像,因为我不得不从回形针切换到 activestorage...
  • routescontroller 表明您正在处理photos。然后你传递一个图像!在您看来,您需要使用@service.photos 而不是@service.images,您需要决定什么是照片,什么是图像以及如何使用它们!你不能将image 传递给service_photo_path,而它需要photo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多