使用活动存储将图像附加到rails的seed.rb文件中

时间:2018-11-19 20:08:44

标签: ruby rails-activestorage

我有一个叫做Vehicles的类,可以在上面附加图像。如果没有其他车辆上载的图像,我已经制作了一个默认图像来显示。

我想将图像包含在seed.rb文件中,所以我不必手动上传所有图像。这可能吗?

非常感谢您的帮助。

这是我的车辆。rb:

class Vehicle < ApplicationRecord
  belongs_to :make
  belongs_to :model
  accepts_nested_attributes_for :make
  accepts_nested_attributes_for :model
  has_one_attached :image

  after_commit :add_default_image, on: %i[create update]

  def add_default_image
    unless image.attached?
      image.attach(
        io: File.open(Rails.root.join('app', 'assets', 'images', 'no_image_available.jpg')),
        filename: 'no_image_available.jpg', content_type: 'image/jpg'
      )
    end
  end
end

这是我在种子文件中创建记录的方式,但是我也想包括这些图像:

v = Vehicle.create(
  vin: '1QJGY54INDG38946',
  color: 'grey',
  make_id: m.id,
  model_id: mo.id,
  wholesale_price: '40,000'
)

2 个答案:

答案 0 :(得分:1)

您可以使用Ffaker gem轻松生成虚假数据,最后在创建车辆记录后,您可以从实例变量更新记录图像属性。选中Attaching File/IO Objects

这将是db/seed.rb文件的代码:

if Vehicle.count.zero?
  10.times do
    v = Vehicle.create(
      vin: FFaker::Code.ean,
      color: FFaker::Color.name,
      maker_id: m.id,
      model_id: m.id,
      wholesale_price: '40,000'
    )
    v.image.attach(io: File.open('/path/to/file'), filename: 'file.jpg')
  end
end

请不要忘记将ffaker宝石添加到您的Gemfile文件中。

答案 1 :(得分:1)

正如上面的答案在 Edge Guides 中指出的那样,对于无法找到正确路径的人,这是 SELECT domain, pattern, cnt FROM (SELECT domain, pattern, COUNT(*) as cnt, ROW_NUMBER() OVER (PARTITION BY domain ORDER BY COUNT(*) DESC) as seqnum FROM email_patterns GROUP BY domain, pattern ) dp WHERE seqnum = 1; 文件中将头像附加到第一个创建的用户的一行示例:

seeds.rb