我目前正在尝试为一个项目填充开发数据库,用大量虚假数据模拟它在有数百篇文章/用户的情况下的外观和操作。我研究了不同的gems来完成这个任务 - 比如Factory Girl,但是文档非常缺乏,我不理解 - 但最终使用了Populator和Faker gems,并执行了以下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
对于基于文本的数据,它非常有效。但是,所有用户都有一个头像,可以通过Paperclip附件上传,所有常规内容也以同样的方式具有缩略图附件。
我了解Populator gem只是直接向数据库填充数据,不一定要运行ActiveRecord验证来完成此操作。因此,如果我只是填写了文件路径,就不能使用Paperclip来生成所有不同的缩略图并将其上传到正确的目录。
是否有一种方法可以通过Populator或其他方式生成虚假图片?或者,是否有一种将rake任务指向硬盘上的库存图片目录以为每条记录自动生成随机缩略图的方法?我在Google上搜寻了一番,但并没有找到太多相关信息。
更新
根据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
基本上,它会在所有记录中循环回来,并从sampleimages目录上传头像。
class Photo < ActiveRecord::Base has_attached_file :foto end
在这里,你需要使用photo.foto = ...
。 - acwUser.all.each{ |user| user.avatar = File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample);user.save}
虽然这可能有点违背 Populate 的目的。 - acw