PaperClipはとってもシンプルなActiveRecordで添付ファイルを管理するプラグインです。
http://github.com/thoughtbot/paperclip/tree/master
便利すぎて鼻血がでそうなプラグインです
使い方のおさらい
カラムを追加して
- class AddAvatarColumnsToUser <ActiveRecord::Migration
- def self.up
- add_column :users, :avatar_file_name, :string
- add_column :users, :avatar_content_type, :string
- add_column :users, :avatar_file_size, :integer
- add_column :users, :avatar_updated_at, :datetime
- end
- def self.down
- remove_column :users, :avatar_file_name
- remove_column :users, :avatar_content_type
- remove_column :users, :avatar_file_size
- remove_column :users, :avatar_updated_at
- end
- end
モデルクラスで定義
- class User <ActiveRecord::Base
- has_attached_file :avatar
- end
とするだけですね。 詳細はRDocをみてください
Amazon S3を使う
PaperClipはストレージにS3を使うためのオプションがあります
- has_attached_file :avatar,
- :storage => :s3,
- :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
- :path => ":attachment/:id/:style.:extension",
- :bucket => 'mybucket'
config/s3.ymlには
- access_key_id: 456...
- secret_access_key: 456...
こんな感じのアクセスキーとシークレットキーを置いておきます
productionでだけS3を使いたい
開発中はローカルで完結したい場合は
- has_attached_file :avatar, Proc.new {
- if RAILS_ENV == 'production'
- {
- :storage => :s3,
- :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
- :path => ":attachment/:id/:style.:extension",
- :bucket => 'mybucket'
- }
- else
- {}
- end
- }.call
こんな感じでいいかな