LoginSignup
2
2

More than 1 year has passed since last update.

DeviseのUserテーブルにカラムを追加する

Posted at

環境

ruby 2.6.3
rails 2.6
cloud9

Gem:devise

この記事の目標

Devise(Gem)でUserテーブルを作成し、ユーザーネームを新規登録(Sign up)で登録できるようにする

1 DeviseでUserテーブルを作成

Deviseを使用するとユーザーテーブルを簡単作成してくれます。
まず初めにモデルを作成。

Deviseを使用する場合のモデル作成コマンド(今回はUserモデル)

$rails g devise User

※通常のモデル作成コマンド

$rails g model モデル名

記述方法が違うので注意

コマンドを実行すると作成される
ファイル
1.モデル(User)
2.マイグレーションファイル

カラム

2 任意のカラムを追加する

ユーザーネームを保存するためのカラム(name)がないので追加します。

1で作成したマイグレーションファイルを開く
※ファイルの場所は dbファイル内 migrate/作成日時

 
マイグレーションファイルに t.string :name を追加しました。

db/migrate/ 作成日時
データ型 :追加するカラム名

3 データベースにマイグレーションする

$ rails db:migrate

コマンド実行後にルーティングを確認します。

routes.rbに ルーティングが自動追加されました。

4 strong parametersを設定する

追加したnameカラムをsign up時に変更許可する設定を行います。

Deviseのコントローラはライブラリで用意されているため直接変更ができません。
そのためapplication_controllerに記述します。

application_controller
  before_action :configure_permitted_parameters, if: :devise_controller?

before_action :configure_permitted_parameters,
 →後ろのif文の条件だったら実行の前にconfigure_permitted_parametersアクションを実行する 

ではif: :devise_controller?とは何か?
 →deviseのコントローラーが呼び出されたら(動いたら)

まとめると、
deviseコントローラーが動く前にconfigure_permitted_parametersアクションを実行しましょう という意味になります。

次に、configure_permitted_parametersアクションの内容を記述します。

application_controller
protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys:[:name])
  end
devise_parameter_sanitizer.permit(:deviseの処理名, keys: [:許可するカラム名])

devise_parameter_sanitizer
 →sanitizerメソッドはUserモデルのパラメーター(情報)を取得するメソッド

permit(:sign_up, keys:[:name])
 →sign_up時にnameのデータ操作を許可
 
before_actionからまとめると、
deviseコントローラーが呼び出された時、nameの変更を許可しますよ といった感じになります。

5 viewの変更

nameを使用する準備ができました。
しかしまだ入力部分がありませんので修正していきます。

deviseであらかじめ準備されているviewのカスタマイズを行います。

 $ rails g devise:views

実行したら作成されたdevise/registrations/new.html.erbフォルダを変更していきます。

devise/registrations/new.html.erb
<h2>Sign up</h2>

<%= 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 :name %><br />
    <%= f.text_field :name, autofocus: true %>
  </div>
'
'

ブラウザで確認します。

Nameが追加されました!

Deviseであらかじめ準備されているコントローラやビューの変更は通常とコードが異なるので注意

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2