Rails,活动存储,attach_one 照片,从文件夹中获取照片时不起作用
Rails, active storage, attach_one photo, doesn't work when fetching photo from folder
所以我试图将图片附加到我的数据库实例,但我找不到正确的路径语法来从我的 images
文件夹中获取它。我做错了什么?
当我使用以下语法在我的服务器上托管图像时它工作正常:
bar1.photo.attach(io: URI.open("https://www.ogsoundfx.com/ogcoding/photo_test/image1.jpg"), filename: 'bar1')
但这行不通:
bar1.photo.attach(io: File.open('../../app/assets/images/bar1.jpg'), filename: 'bar1')
这里是 seed.rg
文件的捕获,来自我 运行 这段代码:
是我的路径错了吗?老实说,我尝试了所有我能想到的方法,但从来没有成功过。
谢谢!
文件路径似乎有问题。
你代码中的当前目录是应用程序根目录,路径中的..
代表它的父目录。
考虑到您的 rails 应用位于 parent_1/parent_2/parent_3/rails-mister-cocktail
下,那么您使用的路径将搜索 parent_1/rails-mister-cocktail/app/assets/images/bar1.jpg
下的附件
请从 irb 中找到以下输出以便更好地理解:
2.6.3 :002 > File.expand_path('../../app/assets/images/logo.png')
=> "/Users/mac1/Documents/RubyProjects/app/assets/images/logo.png"
2.6.3 :003 > File.expand_path('app/assets/images/logo.png')
=> "/Users/mac1/Documents/RubyProjects/LiveProject/testapp/app/assets/images/logo.png"
试试下面的方法:
bar1.photo.attach(io: File.open('app/assets/images/bar1.jpg'), filename: 'bar1')
您还可以读取相对于您的 rails 应用程序根目录的文件。
File.open(File.join(Rails.root, %w(app assets images bar1.jpg)))
可能你想要的是Rails.root
。正如您在 this api documentation 中看到的,此方法 returns 一个 Pathname 对象,它处理以 / 开头的绝对路径(从文件系统的根开始)。
bar1.photo.attach(io: File.open(File.join(Rails.root,'app/assets/images/bar1.jpg')), filename: 'bar1')
这应该可以解决您的问题。
所以我试图将图片附加到我的数据库实例,但我找不到正确的路径语法来从我的 images
文件夹中获取它。我做错了什么?
当我使用以下语法在我的服务器上托管图像时它工作正常:
bar1.photo.attach(io: URI.open("https://www.ogsoundfx.com/ogcoding/photo_test/image1.jpg"), filename: 'bar1')
但这行不通:
bar1.photo.attach(io: File.open('../../app/assets/images/bar1.jpg'), filename: 'bar1')
这里是 seed.rg
文件的捕获,来自我 运行 这段代码:
是我的路径错了吗?老实说,我尝试了所有我能想到的方法,但从来没有成功过。 谢谢!
文件路径似乎有问题。
你代码中的当前目录是应用程序根目录,路径中的..
代表它的父目录。
考虑到您的 rails 应用位于 parent_1/parent_2/parent_3/rails-mister-cocktail
下,那么您使用的路径将搜索 parent_1/rails-mister-cocktail/app/assets/images/bar1.jpg
请从 irb 中找到以下输出以便更好地理解:
2.6.3 :002 > File.expand_path('../../app/assets/images/logo.png')
=> "/Users/mac1/Documents/RubyProjects/app/assets/images/logo.png"
2.6.3 :003 > File.expand_path('app/assets/images/logo.png')
=> "/Users/mac1/Documents/RubyProjects/LiveProject/testapp/app/assets/images/logo.png"
试试下面的方法:
bar1.photo.attach(io: File.open('app/assets/images/bar1.jpg'), filename: 'bar1')
您还可以读取相对于您的 rails 应用程序根目录的文件。
File.open(File.join(Rails.root, %w(app assets images bar1.jpg)))
可能你想要的是Rails.root
。正如您在 this api documentation 中看到的,此方法 returns 一个 Pathname 对象,它处理以 / 开头的绝对路径(从文件系统的根开始)。
bar1.photo.attach(io: File.open(File.join(Rails.root,'app/assets/images/bar1.jpg')), filename: 'bar1')
这应该可以解决您的问题。