2011-04-26 88 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)