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
app/views/devise/registrations/new.html.erb
ユーザーテーブルにニックネームカラムをstring型で追加するマイグレーションファイルを作成
rails g migration AddNicknameToUsers nickname:string
作成したマイグレーションを実行
rails db:migrate
ニックネームを入力するためのフォーム部分を追加
サインアップ時に入力する情報はパラメーターとしてサーバーに送信される。deviceを使わない通常のリクエストの場合は、コントローラーにストロングパラメーターを記述し、受け取れるパラメーターを制限していた。
deviceも同様にストロングパラメーターをコントローラーに記述する。しかし、deviceの処理を行うコントローラーはGem内に記述されているため、編集できない。
nicknameというキーのパラメーターを新たに許可する。
ログインの有無で表示を変える