Ruby onRails (PicTweet) ユーザ登録編

ユーザ登録機能を実装する

ユーザ関連の機能はGemを使用する

 

Twitterなどのウェブサイトにはログイン機能がある

これはユーザに対してアカウントを発行して、そのアカウントでユーザの情報を管理することができる

今回はヘッダーにログインと新規登録のボタンを配置する

ログインすると、ログインボタンがユーザー名に変わり、登録したユーザー名、投稿するボタンのような配置になるようにする

今回はログインしたユーザーのみがツイートの投稿を行えるようにする。ツイートの閲覧に関してはログインしているかどうかに関わらずできるようにする

 

1Gemをインストールし、サーバーを再起動

Gemとはユーザー管理機能を簡単に実装するもの

Gemファイルの最後の行をGem deviceに変更

所定のディレクトリにいることを確認して、bundle installでGemをインストールする

ここでターミナルでrails sとcontrol+cでサーバーを再起動しておく

 

2コマンドを利用し、deviceの設定ファイルを作成

rails g device:installで設定ファイルを作成

rails g deviseはdeviceによるユーザー機能の対象を指定することで、モデルとマイグレーションの生成やルーティングの設定をまとめて処理する

実行すると、モデルが生成され、routes.rbにはdeviceに関するパスが追加される

rails g devise usersでコマンドをユーザーに指定する

補足としてdevice_forはユーザー機能に必要な複数のルーティングを一度に生成するdeviceメソッドである

 

テーブルを作成する

コマンドで作成されたマイグレーションrails db:migrateで実行する

rails sでローカルサーバーを再起動しておく

3コマンドを利用し、userモデルを作成

4未ログイン時とログイン時でボタンの表示を変える実装をする

5コントローラーにリダイレクトを設定する

リダイレクト処理を以下で用意する

(3行目)before_action :move_to_index, except: [:index, :show]

(42行目)def move_to_index

unless user_signed_in?
redirect_to action: :index

end

end

 

バイスのビューを作成する

rails g devise:views

バイス用のビューを編集する

app/views/devise/sessisons/new.html.erb

f:id:kikiMustang:20201118220128j:image

app/views/devise/registrations/new.html.erb

f:id:kikiMustang:20201118220526j:image

ユーザーテーブルにニックネームカラムをstring型で追加するマイグレーションファイルを作成

rails g migration AddNicknameToUsers nickname:string

作成したマイグレーションを実行

rails db:migrate

ニックネームを入力するためのフォーム部分を追加f:id:kikiMustang:20201119210815j:image

サインアップ時に入力する情報はパラメーターとしてサーバーに送信される。deviceを使わない通常のリクエストの場合は、コントローラーにストロングパラメーターを記述し、受け取れるパラメーターを制限していた。

 

deviceも同様にストロングパラメーターをコントローラーに記述する。しかし、deviceの処理を行うコントローラーはGem内に記述されているため、編集できない。

nicknameというキーのパラメーターを新たに許可する。

f:id:kikiMustang:20201119212626j:image

ログインの有無で表示を変える

f:id:kikiMustang:20201119213157j:image