Code Serendipity

Keyword: Ruby, Python, javascript, RoR, heroku, AWS...

Code Serendipity

Keyword: Ruby, Python, wordpress, javascript, AWS...

Rails5でDeviseにプロフィール画像項目を追加するときのTips

https://pbs.twimg.com/profile_images/1123677732/logo_avatar_large.png

gemを入れる

deviseはインストールされている前提で進めます。

gem 'devise'
# 以下、追加
gem 'carrierwave'
gem 'mini_magick'

uploaderを作る

$ rails g uploader Avatar

avatar_uploader.rb で, include Carrierwave::MiniMagickコメントアウトして有効化するのを忘れないこと。

uploaderをUserにマウント

app/model/user.rb

  mount_uploader :avatar, AvatarUploader

migrationする

class AddUserAvatar < ActiveRecord::Migration
  def change
    add_column :users, :avatar, :string
  end
end

ストロングパラメータの設定(sign up で追加したい場合のみ)

application_controller.rb

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:avatar])
  end
end

before_filter はRails5では非推奨(before_actionを利用)なのに注意してください。

View

<% if current_user.avatar.url.present? %>
    <%= image_tag(current_user.avatar.url) %>
    <%= f.label :remove_avatar do %>
      <%= f.check_box :remove_avatar %>
    <% end %>
  <% end %>
  <%= f.file_field :avatar %>
  <%= f.hidden_field :avatar_cache %>

参考

How to: use carrierwave with devise · carrierwaveuploader/carrierwave Wiki · GitHub