前回deviseを使ってgroup機能の登録を試みたが、中間テーブルに保存されないという現象が起きてしまった。
3時間考えた末、いい解決方法が見つからなかったので、思い切って1から作り直すことに。
今回試みた事
- group機能の実装はdeviseではなく、
rails g model group
を使用する - カラムにはパスワードを設定する
手順
まずはモデルの作成
ターミナル
rails g model group
次に必要なカラムを記述。
db/migrate/xxxxx_create_group.rb
class CreateGroups < ActiveRecord::Migration[6.0]
def change
create_table :groups do |t|
# 以下の3行を追記
t.string :group_name, null: false, default: ""
t.string :password_digest, null: false, default: ""
t.text :note
t.timestamps
end
end
end
ターミナルで以下を実行。
ターミナル
rails db:migrate
次にgroup.rbに以下を記述する。
app/models/group.rb
class Group < ApplicationRecord
has_secure_password
end
これ一つを記述するだけで、パスワードが暗号化され、ログイン認証用のメソッドであるauthenticateが使用できるという優れもの。
Gem bcrypt
暗号化するためのgemを用意する。
以下のコメントアウトを外す。
gemfile
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
gem 'bcrypt', '~> 3.1.7' # ここの部分のコメントアウトを外す
# Use Active Storage variant
# gem 'image_processing', '~> 1.2'
最後にbundle install
を実行する。
これでDBにデータが保存される。