web-dev-qa-db-ja.com

Paperclipを使用してプログラムでファイルのアップロードを設定する方法

Faker gemを使用してランダムデータでアプリケーションをシードするrakeタスクがあります。ただし、このrakeタスクでアップロードする画像(ロゴなど)もあります。

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

67
Jaryl

プログラム的にどういう意味ですか?次の行に沿ってファイルパスを取るメソッドを設定できます。

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

#attachmentは、モデルのPaperclip宣言から取得されます。この場合、モデルは次のようになります

class MyModel < ActiveRecord::Base
  has_attached_file :attachment
end

プロジェクトをブートストラップするときに、これと同様のことを行いました。

139
theIV

レーキタスクでこのようなことをします。

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

これがお役に立てば幸いです!

12
jonnii

実際にこのためのメソッドを記述する必要はありませんでした。はるかに簡単です。

モデル内->

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メソッドを記述するのではなく)。これが明確であることを願っています。

8
winfred