初めてのポートフォリオ作成 #3
今回は「初めてのポートフォリオ作成」の#3です。
過去の日記はこちら
初めてのポートフォリオ作成 #0 - 大田区から発信するゆるゆる日記
初めてのポートフォリオ作成 #1 - 大田区から発信するゆるゆる日記
初めてのポートフォリオ作成 #2 - 大田区から発信するゆるゆる日記
初めてのポートフォリオ作成 #2.5 - 大田区から発信するゆるゆる日記
deviseを使ったユーザー登録機能(ネスト項目含む)を実装したので、その内容を書きます。
全部書くと長くなるので、2回に分けて書いていきます。
※下記の内容に不備がありましたら、コメント頂けると幸いです。また、下記の内容をご使用頂ける場合は自己責任でお願いします。
【目次】
環境
rails 5.2.3
ruby 2.6.3
devise 4.6.2
やりたいこと
devise gemを用いてユーザー・ログイン機能を実装する。また、ネストしている別テーブルの性別テーブルからデータ出力と保存を行う。
ユーザー・ログイン機能の実装
性別テーブル作成
◆国際規格に基づき、性別テーブルを作成する
ターミナル
$ rails g model gender gender:string
マイグレーションファイル
class CreateGenders < ActiveRecord::Migration
def change
create_table :genders do |t|
t.string :gender
end
end
end
※カラム削除する場合
(例)rails generate migration Removeカラム名Fromテーブル名 カラム名:データ型名
rails generate migration RemoveCreated_atFromGenders created_at:datetime updated_at:datetime
ターミナル
$ rails db:migrate
◆データを挿入
挿入するデータ内容
+----+-----------+
| id | gender |
+----+-----------+
| 0 | 未回答 |
| 1 | 男性 |
| 2 | 女性 |
| 9 | その他 |
+----+-----------+
指定した数字から連番始まりを開始できるようにする。
> alter table genders auto_increment = 0;
idで0を使えるようにする。
> set global sql_mode='NO_AUTO_VALUE_ON_ZERO';
データを挿入する。
> insert into genders (id, gender) values (0, '未回答'),(1, '男性'),(2, '女性'),(9, 'その他');
※補足
mysqlのデータ変更
> update テーブル名 set カラム名 = 設定する値 where 検索条件;
ユーザー・ログイン機能を実装
◆devise gemをインストールする
gemfile
gem 'devise'
外部キーのgenderカラムを含む、その他必要なカラムをファイルに追記する。
マイグレーションファイル
add_reference :users, :gender, foreign_key: true
add_column :users, :username, :string, null: true
add_column :users, :message, :string
ターミナル
$ rails db:migrate #マイグレーションを実行する
$ rails g devise:install #deviseをインストールする
◆deviseをインストールした時に、ターミナルに表示される指示に従ってファイルを編集する
config/environments/development.rb(追加)
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
config/routes.rb
root 'home#index'
app/views/layouts/application.html.erb
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
◆deviseでモデル・ルーティングを作成
ターミナル
$ rails g devise user
◆deviseでコントローラーを作成
ターミナル
$ rails g devise:controllers user
ついでにusersコントローラーのshowも作成
ターミナル
$ rails g controller Users show
◆モデルの定義を行う
models/user.rb
has_one :gender
models/gender.rb
belongs_to :user
◆deviseでビューファイルを作成
ターミナル
$ rails g devise:views users
次回
次回は具体的な設定内容を書いていきます!
地道にポートフォリオ作っていきます!
参考サイト
GitHub - plataformatec/devise: Flexible authentication solution for Rails with Warden.
※見なくても良い補足情報
①MySQL 8.0.4の認証方式変更
MySQL 8.0.4のデフォルトの認証方式が変更になっています。
デフォルトの認証方式ではrails開発では都合が悪いそうなので、認証方式の変更方法を書いておきます。
下記の記載内容はセキュリティ面などを全く調べていないので、実行される場合は自己責任でお願いいたします。
mysqlログイン後
認証方式を確認
> SELECT user, host, plugin FROM mysql.user;
pluginが「caching_sha2_password」になっていると思いますが、これが都合悪いようです。
認証方式を変更
> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '';
これを実行すると、rootのpluginが「mysql_native_password」に変更されていると思います。
他のuserでログインする場合は、上記の「root」と「localhost」を変更する必要があります。
mysqlをリスタート
$ mysql.server restart
上記の方法以外では、新規ユーザ作成時の認証方式を変更する方法もあります。
mysqlログイン後
> default-authentication-plugin = mysql_native_password
こちらを最初に登録しておくと、次回から新規ユーザを作成する際には、pluginが「mysql_native_password」でユーザが作成されます。
②カラムの制約変更のrailsコマンド
$ rails g migration ChangeColumnToUser