2020年5月4日月曜日

簡易SNSを作ってみよう(6)

マイページの作成
ログイン後にユーザー別で表示するページを作成する.
ルーティングの追加
ルーティングを追加する.
【手順】
vi config/routes.rb
(以下を追記)
Rails.application.routes.draw do
  devise_for :users, controllers: {
        sessions:      'users/sessions',
        passwords:     'users/passwords',
        registrations: 'users/registrations'
  }
  root to: 'home#index'
  resources :users, :only => [:show]
end
コントローラとビューの追加
コントローラを追加する.各ページにはログインしていないとアクセスできないようにする.
【手順】
bin/rails g controller users show
vi app/controllers/users_controller.rb
(以下を追記)
class UsersController < ApplicationController
  before_action :authenticate_user!

  def show
    @user = User.find(params[:id])
  end
end

vi app/controllers/users/sessions_controller.rb
(以下を追記し,ログイン後にマイページに飛ばすようにする)
  def after_sign_in_path_for(resource)
    user_path(resource.id)
  end

ビューを追加.とりあえずフルネームを表示させてマイページが表示されることを確認する.
【手順】
vi app/views/users/show.html.erb
(以下に修正)
<h1>MyPage for <%= @user.fullname %></h1>

ダミーデータの作成と登録

いったんDBをまっさらにして作り直しておく.また,ダミーデータファイルを用意し,データベースに投入する.
【手順】
bin/rails db:drop
bin/rails db:create
bin/rails db:migrate
vi db/seeds.rb
 (以下を追記する)
names = [ 'Mr. Teacher', 'Antonio Banderas', 'Cynthia Erivo',
'Scarlett Johansson', 'Jonathan Pryce', 'Florence Pugh',
'Yalitza Aparicio', 'Olivia Colman', 'Marina de Tavira',
'Adam Driver', 'Sam Elliott', 'Lady Gaga', 'Richard E. Grant',
'Regina King', 'Rami Malek', 'Mary J. Blige', 'Timothée Chalamet', 
'Allison Janney', 'Daniel Kaluuya', 'Lesley Manville', 
'Laurie Metcalf', 'Margot Robbie', 'Sam Rockwell', 'Mahershala Ali', 
'Andrew Garfield', 'Naomie Harris', 'Lucas Hedges', 'Isabelle Huppert',
'Ruth Negga', 'Dev Patel', 'Bryan Cranston', 'Tom Hardy',
'Brie Larson', 'Jennifer Jason Leigh', 'Rachel McAdams',
'Charlotte Rampling', 'Mark Rylance', 'Alicia Vikander',
'Patricia Arquette', 'Steve Carell', 'Benedict Cumberbatch',
'Felicity Jones', 'Michael Keaton', 'Rosamund Pike', 'Eddie Redmayne',
'J. K. Simmons', 'Emma Stone', 'Barkhad Abdi', 'Chiwetel Ejiofor',
'Michael Fassbender', 'Sally Hawkins', 'Jared Leto', 
'Matthew McConaughey', 'Lupita Nyong\'o', 'June Squibb', 
'Bradley Cooper', 'Hugh Jackman', 'Emmanuelle Riva', 
'Quvenzhané Wallis', 'Bérénice Bejo', 'Demián Bichir', 
'Jessica Chastain', 'Jean Dujardin', 'Jonah Hill', 'Rooney Mara', 
'Melissa McCarthy', 'Gary Oldman', 'Octavia Spencer', 
'Christian Bale', 'Jesse Eisenberg', 'James Franco', 'John Hawkes', 
'Jennifer Lawrence', 'Mark Ruffalo', 'Hailee Steinfeld', 
'Jacki Weaver', 'Sandra Bullock', 'Vera Farmiga', 'Colin Firth',
'Maggie Gyllenhaal', 'Anna Kendrick', 'Mo\'Nique', 'Carey Mulligan',
'Christopher Plummer', 'Jeremy Renner', 'Gabourey Sidibe', 
'Stanley Tucci', 'Christoph Waltz', 'Josh Brolin', 'Viola Davis', 
'Anne Hathaway', 'Taraji P. Henson', 'Richard Jenkins', 
'Frank Langella', 'Melissa Leo', 'Mickey Rourke', 'Michael Shannon',
'Casey Affleck', 'Marion Cotillard', 'Ruby Dee', 'Hal Holbrook',
'Viggo Mortensen', 'Ellen Page', 'Saoirse Ronan', 'Tilda Swinton']

names.each_with_index {|name, i|
  uid = sprintf "user%03d", i
  User.create(username: uid, fullname: name, 
password: '123456', 
role: ((i == 0) ? 'teacher' : 'student'))
}

bin/rails db:seed
確認
サーバを起動し,投入したデータでログインできることを確認する.

0 件のコメント:

コメントを投稿