Rails,活动存储,尝试附加照片时出现错误消息

问题描述

我正在尝试将照片直接附加到seed.rb中的实例上。但是我不认为这是问题所在,因为它在控制台中也不起作用。 运行rails db:seed时收到以下错误消息: Errno::ENOENT: No such file or directory @ rb_sysopen - ../app/assets/images/image.jpg

这是我的模特:

class Restaurant < ApplicationRecord
  restaurant_types = ["chinese","italian","japanese","french","belgian"]
  has_one_attached :photo
  has_many :reviews,dependent: :destroy
  validates :name,:address,:category,:phone_number,presence: true
  validates :category,inclusion: { in: restaurant_types,message: "%{value} is not a valid size" }
end

这是我的种子文件

require 'open-uri'
require "faker"
puts "deleting all restaurants and reviews"

Review.delete_all
Restaurant.delete_all

puts Restaurant.count
puts Review.count

puts "creating new restaurants"

20.times do
  name = Faker::Restaurant.name
  address = Faker::Address.community
  phone = Faker::PhoneNumber.cell_phone
  category = ["chinese","belgian"].sample
  restaurant = Restaurant.create(name: name,address: address,phone_number: phone,category: category)
  restaurant.photo.attach(io: File.open('../app/assets/images/image.jpg'),filename: 'image')
end

我还require "active_storage/engine"文件中包含了config/application.rb

这是我的应用程序文件夹,也是我的seed.rb和image.jpg文件所在的位置。显然链接有问题吗?

REST API

有人知道我在做什么错吗? 谢谢!

解决方法

您需要通过Rails.root

来获取应用程序的路径

在您的种子文件中对此进行更改,然后尝试

restaurant.photo.attach(io: File.open(Rails.root.join("app","assets","images","image.jpg")),filename: 'image.jpg')

您也可以将其存储在变量中

file_path = Rails.root.join("app","image.jpg")
restaurant.photo.attach(io: File.open(filepath),filename: 'image.jpg')

还要为文件存在添加条件

File.exist? file_path

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...