2011年6月9日木曜日

Rails:ファイルの添付の覚書(DBへではなく、ファイルを保存)その2

前回はプラグインを使わず、ファイルアップロードを行いました。

今回は、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)

  :

0 件のコメント:

コメントを投稿