ruby 使用活动存储将seed.rb文件中的映像附加到Rails中

ftf50wuq  于 2022-11-04  发布在  Ruby
关注(0)|答案(3)|浏览(114)

我有一个名为vehicles的类,它可以附加一个图像。如果vehicles.rb文件中没有上传其他图像,我已经创建了一个默认图像来显示。
我想在seed.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'
)
holgip5t

holgip5t1#

您可以使用Ffaker gem轻松生成假数据,最后在创建车辆记录后,您可以从示例变量更新记录图像属性。
这将是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(File.join(Rails.root,'app/assets/images/photo.jpg')),
      filename: 'photo.jpg'
    )
  end
end

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

2j4z5cfb

2j4z5cfb2#

正如上面的答案所指出的,它在边缘指南中,对于那些在正确获取路径方面遇到困难的人,这是seeds.rb文件中的一行将化身附加到第一个创建的用户的示例:

User.first.avatar.attach(io: File.open(File.join(Rails.root,'app/assets/images/avatar.jpg')), filename: 'avatar.jpg')
toe95027

toe950273#

这种方法对我在Rails 7:

  • 我把我的图像在公共/图像文件夹。
  • 设定数据库种子
数据库/种子.rb
post = Post.create!(title: "My Title", description: "My description")
post.image.attach(io: File.open(Rails.root.join("public/images/sample.jpg")), filename: "sample.jpg")

1.然后在我看来:

应用程序/视图/帖子/显示.html.erb

# to get the image URL:

polymorphic_url(@post.image)

# to display the image

image_tag post.image if post.image.attached?

所有这些都假定您安装了ActiveStorage:
在您的终端中:

$ rails active_storage:install
$ rails db:migrate

然后在您的模型中:

型号/post.rb
has_one_attached :image

在你的控制器中。添加图像到允许的参数:

params.require(:post).permit(:image, :everything_else)

相关问题