2011-04-26 90 views
19

我目前正试图用一堆假数据来填充项目上的开发数据库,​​以模拟它将如何外观和操作数百篇文章/用户。我看着不同的宝石做任务 - 如工厂女孩,但文档是非常缺乏的,我没有得到它 - 但最终使用填充器和法克尔宝石和做了以下rake任务...用假数据生成回形针图片上传 - Ruby on Rails Populator/Faker Gems

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 

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

我明白填充器宝石只是做了直人口数据库,而不是一定要通过ActiveRecord的验证跑办so..therefor我会假设回形针不能运行产生各种不同的缩略图和需要(并上传到如果我刚刚在上面的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 

它基本上循环回身边,并上载从sampleimages目录化身上的所有记录。

回答

7

要在任务中随机图像关联,你可以尝试以下方法:

user.avatar = File.open(Dir.glob(File.join(Rails.root, 'sampleimages', '*')).sample) 

其中sampleimages是被随机

+0

给了这个尝试,并在上面我的耙子任务中插入了该行(并在我的rails项目中创建了sampleimages目录),但它吐出了“rake aborted! 未定义的方法'avatar ='for#“运行任务。由于数据库将列分成三个(avatar_file_name,avatar_content_type,avatar_file_size),这可能是原因。 – Shannon 2011-04-26 15:41:11

+0

您必须使用您在模型中定义的名称,例如: 'class Photo acw 2011-04-26 15:46:51

+0

这就是我在做什么,我的用户模型的附件名为'avatar'(has_attached_file:avatar)。 – Shannon 2011-04-26 15:56:12

0

我解决这个问题的一种方法是在我的视图中添加一个条件。

比方说,你的模型是“用户”,它有一个化身。然后,你可以做到以下几点:

<% if product.avatar.exists? %> 
    ... show the attached photo 
<% else %> 
    .. show a default photo 
<% end %> 

这对我的作品有回形针,我用它在我的dev的数据库中的所有时间,而不必担心其连接到所有用户中的所有图像。

+2

题外话相关包含化身的目录,但有是另一种方法......如果您在模型中的has_attached_file中使用default_url,则如果未找到上传的图像,则视图中的回形针调用将回退到默认图像。方便并减少查看代码。至于我的情况,我已经有我的用户这样设置,但我希望看到一些随机性......更不用说内容有附加图像了,没有后备版本。 – Shannon 2011-04-26 15:33:15

1
user.avatar = File.open(Dir['app/assets/images/*.jpg'].sample)