ruby-on-rails - Rails、事件存储、尝试附加照片时出现错误消息

标签 ruby-on-rails image activerecord rails-activestorage seed

我正在尝试将照片直接附加到 seed.rb 中的实例。但我不认为这是问题所在,因为它在控制台中也不起作用。 当我运行 rails db:seed 时,我收到以下错误消息: Errno::ENOENT:没有这样的文件或目录@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", "italian", "japanese", "french", "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

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

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

enter image description here

谁知道我做错了什么? 谢谢!

最佳答案

您需要通过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", "assets", "images", "image.jpg")
restaurant.photo.attach(io: File.open(filepath), filename: 'image.jpg')

此外,添加文件存在的条件

File.exist? file_path

关于ruby-on-rails - Rails、事件存储、尝试附加照片时出现错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63373850/

相关文章:

ruby-on-rails - http代理背后的capistrano

ruby-on-rails - 延迟作业与 Rails 中的 Cron

ruby-on-rails - add_index 的高级用法

jquery - 使用 jQuery 清除 IMG

html - Firefox 显示损坏的图像

c - 扩张期间不需要的噪声元素

mysql - 如何在 ActiveRecord 中查找除原始记录之外的重复记录

ruby-on-rails - RoR表继承?