69

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

すでにペーパークリップを設定していますが、レーキタスクでプログラムでアップロードする方法がありません。何か案は?

4

3 に答える 3

145

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

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

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

于 2009-09-09T04:18:37.190 に答える
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

これが役立つことを願っています!

于 2009-09-09T04:19:56.157 に答える
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 を記述するのではなく) モデルで定義されているアタッチメントの名前を使用することを意味していました。これが明確であることを願っています。

于 2011-05-23T16:13:59.053 に答える