2009-09-09 65 views
62

我有一個rake任務,使用faker gem爲隨機數據創建應用程序。不過,我們也有圖片(如徽標),我們想要在這個耙子任務中上傳。如何使用Paperclip以編程方式設置文件上傳

我們已經設置了回形針,但沒有辦法以編程方式將它們上傳到rake任務中。有任何想法嗎?

回答

130

你是什麼意思的編程?您可以設置,將採取一個文件路徑沿着

my_model_instance = MyModel.new 
file = File.open(file_path) 
my_model_instance.attachment = file 
file.close 
my_model_instance.save! 

#attachment來自我們在我們的模型回形針申報行的方法。在這種情況下,我們的模型看起來像

class MyModel < ActiveRecord::Base 
    has_attached_file :attachment 
end 

當引導項目時,我們已經做了類似的事情。

+4

'attachment'就是你在'has_attached_file:attachment'中設置的任何內容,' – 2012-12-04 05:03:23

+1

@如果我將其添加到答案中,您認爲它會更清楚嗎?如果是這樣,我會添加它。 – theIV 2012-12-04 16:06:05

+0

是的。不清楚'attachment'是保留字還是用戶定義的。 – 2012-12-04 16:08:39

12

我在rake任務中這樣做。

photo_path = './test/fixtures/files/*.jpg' 
Dir.glob(photo_path).entries.each do |e| 
    model = Model.find(<query here>)   
    model.attachment = File.open(e) 
    model.save 
end 

我希望這有助於!

+0

這很有用,但我想我們並沒有完全這樣做,謝謝! – Jaryl 2009-09-09 05:45:53

+0

非常感謝這一點,正是我所需要的 – Thomas 2013-06-20 18:06:14

+0

不客氣。 – jonnii 2013-06-21 18:49:04

8

我實際上並不需要爲此寫一個方法。簡單得多。

在型號 - >

Class Model_Name < ActiveRecord::Base 
    has_attached_file :my_attachment, 
    :params_for_attachment 

在seed.db - >

my_instance = Model_name.new 
my_instance.my_attachment = File.open('path/to/file/relative/to/app') 
my_instance.save! 

或許意味着使用的模型中定義的(而不是寫一個附件的名稱以前的答案方法Model_name.attachment)。 希望這很清楚。

+0

或在一行中'my_instance = Model_name.create!(my_attachment:File.open('path/to/file/relative/to/app'))' – scarver2 2014-06-30 13:33:06

+0

fyi for某種原因,我無法讓多行工作,但scarver2的工作是一種享受 – Ben 2014-12-12 06:08:34

相關問題