&tag(CarrierWave); *目次 [#m00f5025] #contents *関連ページ [#xb0b63f5] *参考情報 [#tc3a51e3] -[[carrierwaveuploader/carrierwave:https://github.com/carrierwaveuploader/carrierwave]] …公式サイト -[[Rails 超お手軽な画像アップローダー CarrierWave の使い方 | Workabroad.jp:http://www.workabroad.jp/tech/1118]] *デモプロジェクトの作成 [#i2ddbd9e] **Gemfile [#r4f528c7] -以下を追加し、bundle updateを実行 #pre{{ gem 'carrierwave' gem 'rmagick' }} **準備 [#p5aff167] -アップローダーの生成 #pre{{ $ bundle exec rails g uploader image }} -マイグレーションファイル #pre{{ $ bundle exec rails g migration add_image_to_books image:string #=> db/migrate/xxxxx_add_image_to_users.rbが生成される。 }} -マイグレーション実行。Booksテーブルにimageカラムが追加される。imageカラムにはファイル名が保存される。 #pre{{ $ bundle exec rake db:migrate }} -Bookモデルにアップローダーをマウント。 #pre{{ class Book < ActiveRecord::Base validates :title, :presence => true # 下記を追加 mount_uploader :image, ImageUploader end }} -controllerを変更。 #pre{{ def book_params params.require(:book).permit(:title, :author, :summary, :image) end }} ** Uploaderの修正 [#u0b82161] -app/uploaders/image_uploader.rbを編集し、画像サイズや、ファイルの保管場所などの設定を行う。 ** Viewの編集 [#zc0b238d] -編集画面。 #pre{{ <%= form_for(@book) do |f| %> (...省略...) <%= f.label :image %> <%= f.file_field :image %> (...省略...) <% end %> }} -表示画面。@book.image.<アップローダーで付けた縮小画像の名前>.urlでアクセス。 #pre{{ <% if @book.image? %> <%= image_tag @book.image.s.url %> <% else %> 画像がありません <% end %> }} *Tips [#lbb680c6] **ちょっとだけ異なるUploaderを作りたい。 [#pa89bc25] -例えばimage1とimage2でベースとなるファイル名だけ変えたい場合。CarrierWave::Uploader::Baseを継承したベースクラスを作りそこからさらに継承するのはできない(仕様上うまく動かないらしい)。 -Uploaderからカラム名などにアクセスできるのでそれを使うのが簡単かも。例えばカラム名をそのままファイル名に使いたい場合、mount_asが使える。 --book.rb #pre{{ class Book < ActiveRecord::Base validates :title, :presence => true # 下記を追加 mount_uploader :image, ImageUploader mount_uploader :image2, ImageUploader end }} --image_uploader.rb。マウントされたカラムによってファイル名が変わる。 #pre{{ def filename # "image1.jpg" or "image2.jpg" "#{mounted_as}.jpg" end }}