はじめに
画像登録の実装の際に、carrierwaveを用いて実装しました。
その時に調べたこと感じたことの記録です。
結論
実装自体は単純で、使い勝手が良い。
ドラッグ&ドロップなどにも対応可能。
手順
1. インストール
ターミナル上で以下のコードを実行し、最新版のcarrierwaveをインストール
$ gem install carrierwave
Gemfile内に以下を追加
gem 'carrierwave', '~> 2.0'
2. 実装
-
uploader
の実装
以下のコードを実行して、uploader
を実装する。
$ bundle exec rails generate uploader ###
###
の部分はimage
やavator
など、その時のカラムに合わせて変えてください。
そうすると
app/uploaders/###_uploader.rb
というファイルが作成されている。
中身は「保存先の指定」「アップロードする画像の種類」などの指定ができる。
- uploaderを作成したら、モデルとの関連付け
以下のコードを関連付けしたいモデルに追記する。
(今回で言うと、document_images.rb)
mount_uploader :carrierwave用に作ったカラム名, carrierwaveの設定ファイルのクラス名
- ファイルのアップロード
viewで画像を登録するのに、以下をviewのファイル書く。
今回はnew.html.erbにコードを書いてます。
<%= f.label :image %>
<%= f.file_field :image %>
注意点
複数枚の画像を登録する場合、まとめたファイルがdbに登録されます。
そのため、1枚1枚の写真を取り出すには別のメソッドを使用する必要があるそうです。
【Rails】画像を複数投稿したい
参考サイトにもありますが、アンチメソッドのようです・・・
また、
mount_uploader :carrierwave用に作ったカラム名, carrierwaveの設定ファイルのクラス名
のmount_uploader
を複数形にすると、carrierwave用に作ったカラムを配列形式で扱わないといけなくなるので、タイポ要注意です!
さいごに
上記内容で、一通り実装は出来ます。
が、アンチメソッドを使った実装はまだしていないので、挙動は不明です。
ドキュメント自体に画像が登録されるかについても、show.html.erbにコードを書いていないので、別の記事で書きます!