今回は、carrierwave を利用した場合の例です。
まず、carrierwave をインストールします。
尚、Railsのバージョンは2.3.11です。
現時点のcarrierwaveの最新バージョンは 0.5.4 ですが、こちらはRails3用のようです。
以下の処理でインストールされたのは 0.4.10 でした。
#{RAILS_ROOT}/Gemfile
source :rubygems gem 'carrierwave', '~>0.4.0'
$ bundle Fetching source index for http://rubygems.org/ Installing carrierwave (0.4.10) Using bundler (1.0.10) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.
少々待ちましたが、インストールされました。
$ ruby script/generate uploader attachment
app/uploaders/attachment_uploader.rb
が作成されます。
store_dirメソッドが自動生成されています。
こちらがファイルのアップロード先になります。
今回修正しました。
ちなみにSettingsは共通パラメータを設定するのに便利なsettingslogicをプラグインを導入し、外部のyamlファイルの設定を読み込めるようにしたものです。
attr_accessor :sub_dir # 追加 storage :file def store_dir #"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" Settings.upload_dir + "/#{sub_dir}" # 追加 end
Controller
私の場合、AttachmentUploaderクラスを利用するファイルで
carrierwaveをrequireする必要がありました。
require 'carrierwave' : uploader = AttachmentUploader.new uploader.sub_dir = @message.id.to_s uploader.store!(upload_file) :