【问题标题】:Active storage seed Rails主动存储种子 Rails
【发布时间】:2018-10-09 19:21:32
【问题描述】:

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

这是我的种子。

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

感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails ruby rails-activestorage


    【解决方案1】:

    几天前它也在文档指南中:

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

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

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

    如果可能,请同时提供内容类型。活动存储尝试 从数据中确定文件的内容类型。它回落到 如果它不能这样做,您提供的内容类型。

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

    如果您不提供内容类型且 Active Storage 无法确定 文件的内容类型自动,默认为 应用程序/八位字节流。

    【讨论】:

    • 注意:'/path/to/file' 包括文件名。与您在文件名关键字参数中再次使用的文件名相同。
    【解决方案2】:

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

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

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

    【讨论】:

    • 您可以接受自己的答案,从而关闭问题,以便在仅显示未回答的视图中过滤此问题
    • 您能否详细说明您是如何找到要打开的文件的路径的?
    • 这是你的文件路径。这是为了一粒种子。对不起,我不太明白你的问题。
    • 我想我一直误解它是如何工作的。您是在此处打开种子的文件路径,而不是您尝试附加的图像的文件路径吗?
    • 附上种子文件真的没有意义。我看起来你想附上图像文件的路径。
    猜你喜欢
    • 2018-11-07
    • 2022-12-08
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2013-09-06
    • 2019-11-21
    相关资源
    最近更新 更多