- 追加された行はこの色です。
- 削除された行はこの色です。
&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
}}