こんにちは。Takitaです。
備忘のためにcarrierwaveを使って、ローカルに画像をアップロードする手順を記しておきます。
GemのREADMEに記載があるのでインストールは飛ばします。
詳しい手順はREADMEやここなどにもあります。
ポリモーフィック関連で実装しているので、imageという名前でuploaderを作成します。
rails generate uploader image
最小限の機能で良いので、上記のコマンドで作成されたimageuploader.rbをこんな感じにします。
imageuploader.rbのパスは画像の左下に出てます。
以下の★ の箇所を追記します。
class Image < ActiveRecord::Base
acts_as_paranoid
★ mount_uploader :image, ImageUploader
belongs_to :imageable, polymorphic: true
★ belongs_to :user, polymorphic: true
end
なぜかmodels/userにuploaderをmountしていたので、Images.imageに#ActionDispatch::Http::UploadedFileほにゃららという文字列が入ってうまく画像をupdateできずに相当はまりました...
views/users/_form.html.erb
user has one image なので、user.image.imageurlで画像のURLを取得します。
hasmanyの場合は、user.images.first.imageurlとかeachでimagesを回してimageurlとかでURLが取得できます。
<% if user.image.image_url.nil? %>
<%= image_tag 'no_image.jpg', size: '270x300' %>
<%= f.file_field :image %>
<% else %>
<%= image_tag user.image.image_url %>
<% end %>
READMEに記載がある通り、removeimageを使います。
viewを以下の通りにするだけで保存時に画像が削除されます。
```
box :removeimage, user.image.removeimage %>
画像を削除する
```
追記: 過去ブログを移行しました。