Faker gemを使用してランダムデータでアプリケーションをシードするrakeタスクがあります。ただし、このrakeタスクでアップロードする画像(ロゴなど)もあります。
Paperclipはすでに設定されていますが、rakeタスクでプログラムでアップロードする方法はありません。何か案は?
プログラム的にどういう意味ですか?次の行に沿ってファイルパスを取るメソッドを設定できます。
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
プロジェクトをブートストラップするときに、これと同様のことを行いました。
レーキタスクでこのようなことをします。
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
これがお役に立てば幸いです!
実際にこのためのメソッドを記述する必要はありませんでした。はるかに簡単です。
モデル内->
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メソッドを記述するのではなく)。これが明確であることを願っています。