&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
}}

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS