DeviseのuserにActiveStorageでアイコンを追加した話

今回はDeviseuserを追加した際のuserActiveStorageを用いてアイコン画像をアップロードした話についてまとめます。

model/user.rbにて以下を追加

class User < ApplicationRecord
  has_one_attached :image

~省略~
end

controllers/application_controller.rbにて以下を追加

before_action :configure_permitted_parameters, if: :devise_controller?

~省略~

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:image])
    devise_parameter_sanitizer.permit(:sign_in, keys: [:image])
    devise_parameter_sanitizer.permit(:account_update, keys: [:image])
  end 

views/users/registrations/new.html.erb及びedit.html.erbに以下の行を追加

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
  <%= render "devise/shared/error_messages", resource: resource %>

  <div class="field">
    <%= f.label :image %>
    <%= f.file_field :image %>
  </div>

~省略~

アイコンのviewsを該当のviewに作ってあげる

<% if @user.image.attached? %>
  <%= image_tag(@user.image, :size => "80x80") %>
<%end%>

最後に

今回application_controllerのところにbefore_action ~~を追加してuserテーブルにimageカラムを追加を有効化するのを忘れていて結構詰んだので今後は気をつけていきたい。