Yak shaving logs


My life is just yak shaving.

carrierwaveを使ってlocalに画像をuploadする

2016/05/20 #carrierwave

By Yusuke Takita


こんにちは。Takitaです。

備忘のためにcarrierwaveを使って、ローカルに画像をアップロードする手順を記しておきます。

  • rails 4.2

手順

GemのREADMEに記載があるのでインストールは飛ばします。

詳しい手順はREADMEやここなどにもあります。

1.コントローラーを作る

ポリモーフィック関連で実装しているので、imageという名前でuploaderを作成します。


rails generate uploader image

最小限の機能で良いので、上記のコマンドで作成されたimageuploader.rbをこんな感じにします。

image
uploader.rbのパスは画像の左下に出てます。

2.モデルを修正する

以下の★ の箇所を追記します。

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できずに相当はまりました...

3. ビューを修正する

views/users/_form.html.erb

user has one image なので、user.image.imageurlで画像のURLを取得します。

has
manyの場合は、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 %>
画像を削除する

```

TODO


追記: 過去ブログを移行しました。

このエントリーをはてなブックマークに追加

categories


最新記事


tags