我有一个叫做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'
)
答案 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