2009-09-09 22 views
62

faker gemを使用してアプリケーションにランダムデータをシードするレイクタスクがあります。しかし、私たちはこのレーキ課題にアップロードしたい画像(ロゴなど)も持っています。Paperclipを使用してプログラムでファイルアップロードを設定する方法

既にPaperclipがセットアップされていますが、プログラムでレイクタスクにアップロードする方法はありません。何か案は?

答えて

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 'に設定したものです。 –

+1

@BSeven答えにそれを加えれば、もっと明確になると思いますか?もしそうなら、私はそれを追加します。 – theIV

+0

はい。 'attachment 'が予約語かユーザー定義かどうかは不明です。 –

12

私はレーキの仕事でこれをします。

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

+0

これは本当にありがとうございました。私が必要としていたのはまさに – Thomas

+0

です。 – jonnii

8

私は実際にこれのためのメソッドを書く必要はありませんでした。ずっと簡単です。モデルで

- seed.dbで>

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

- >

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'))の1行になります)' – scarver2

+0

fyi for何らかの理由で私はマルチラインを動作させることができませんでしたが、scarver2のものは治療を受けました – Ben

関連する問題