9

我想用一些包含活动存储附件的实例来为我的数据库播种,但我不知道该怎么做。我尝试了一些方法,但没有成功。

有我的种子。

User.create(email: "test@ok.com", password: "okokok") if User.count.zero?

50.times do |i|
  temp = Template.create(
    title: Faker::Name.name,
    description: Faker::Lorem.paragraph(2),
    user: User.first,
    github_link: Faker::SiliconValley.url,
    category: rand(0...4)
  )
  puts Template.first.photo
  temp.photo.attach(Template.first.photo)
end

谢谢你的帮助

4

2 回答 2

15

几天以来,它也在文档指南中:

http://edgeguides.rubyonrails.org/active_storage_overview.html#attaching-file-io-objects

有时您需要附加一个不是通过 HTTP 请求到达的文件。例如,您可能希望附加您在磁盘上生成或从用户提交的 URL 下载的文件。您可能还想在模型测试中附加一个夹具文件。为此,请提供至少包含一个打开的 IO 对象和一个文件名的 Hash:

@message.image.attach(io: File.open('/path/to/file'), filename: 'file.pdf')

如果可能,请同时提供内容类型。Active Storage 尝试从文件的数据中确定文件的内容类型。如果它不能这样做,它会退回到您提供的内容类型。

@message.image.attach(io: File.open('/path/to/file'), filename: 'file.pdf', content_type: 'application/pdf')

如果您不提供内容类型且 Active Storage 无法自动确定文件的内容类型,则默认为 application/octet-stream。

于 2018-05-02T11:18:40.450 回答
4

好的,我找到了解决方案,我将其发布给处于相同情况的人:

temp.photo.attach(
    io: File.open('storage/3n/GG/3nGGV5K5ucYZDYSYojV8mDcr'),
    filename: 'file.png'
  )

如果您有更简单的解决方案,请分享它;)

于 2018-04-29T15:30:05.597 回答