首页 > 解决方案 > 从文件夹中获取照片时,Rails、活动存储、attach_one 照片不起作用

问题描述

所以我试图将图片附加到我的数据库实例,但我找不到正确的路径语法来从我的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这是我运行此代码 的文件的捕获:在此处输入图像描述

我的路错了吗?老实说,我尝试了我能想到的所有可能的方法,但从未成功。谢谢!

标签: ruby-on-railsrubyactiverecordphotoseed

解决方案


文件路径似乎有问题。

代码中的当前目录是应用程序根目录,..路径中代表其父目录。

考虑您的 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)))

推荐阅读