使用虚假数据生成Paperclip图像上传 - Ruby on Rails Populator/Faker Gems

Sha*_*non 19 ruby-on-rails paperclip

我目前正在尝试使用一堆虚假数据填充项目上的开发数据库,​​以模拟它与数百篇文章/用户的外观和操作方式.我查看了不同的宝石来完成这项任务 - 比如Factory Girl,但文档非常缺乏,我没有得到它 - 但最终使用了Populator和Faker宝石,并做了以下rake任务......

namespace :db do
   desc "Testing populator"
   task :populate => :environment do
      require "populator"
      require "faker"

      User.populate 3 do |user|
         name = Faker::Internet.user_name   
         user.name = name
         user.cached_slug = name
         user.email = Faker::Internet.email
         user.created_at = 4.years.ago..Time.now
      end
   end
end
Run Code Online (Sandbox Code Playgroud)

适用于基于文本的数据.但是,所有用户都有一个可以通过Paperclip附件上传的头像,以及所有常规内容都以相同的方式添加缩略图附件.

我理解Populator gem只是对数据库进行直接填充而不必通过ActiveRecord验证来执行此操作.因此我认为Paperclip无法运行以生成所有不同的缩略图并且需要(并上传到正确的目录)对于头像,如果我在上面的rake任务中填充了一个文件路径的字段.

有没有办法通过Populator或其他方式填充假图像?或者也许是一种将rake任务指向我硬盘上的库存图像目录以自动生成每条记录的随机缩略图的方法?曾经在Google上寻找过一种方式,但是没有找到关于这个主题的更多信息.

UPDATE

最终的解决方案,基于pwnfactory的思路......

namespace :db do
  desc "Testing populator"
  task :populate => :environment do
    require "populator"
    require "faker"

    User.populate 3 do |user|
      name = Faker::Internet.user_name
      user.name = name
      user.cached_slug = name
      user.email = Faker::Internet.email
      user.created_at = 4.years.ago..Time.now
    end

    User.all.each { |user| user.avatar = File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample); user.save! }
  end
end
Run Code Online (Sandbox Code Playgroud)

它基本上循环回来并从sampleimages目录中上传所有记录中的化身.

acw*_*acw 7

要在任务中关联随机图像,您可以尝试以下操作:

user.avatar = File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample)
Run Code Online (Sandbox Code Playgroud)

其中sampleimages是包含随机关联的化身的目录