【rails】プロフィールページを作る

※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

プロフィールページを作る

1対1

  • ユーザーとプロフィール → 1対1
プロフィールに載せるもの
  • ニックネーム(文字)
  • 生年月日(日付)
  • 性別(数字
  • 自己紹介(長文)
  • 通知設定(Boolean)
    「true」or「false」の二択から選ぶ


モデルを作る

warp(ターミナル画面)で以下を実行

rails g model Profile

migration fileを編集する

db/マイグレーションファイルを開く

class CreateProfiles < ActiveRecord::Migration[6.0]
  def change
    create_table :profiles do |t|
     # userと紐づける user_idがないとfalseになる
      t.references :user, null: false
     # 文字列 ニックネーム
      t.string :nickname
     # 長文 自己紹介
      t.text :introduction
     # 整数 性別は文字列じゃなくて数字にすることが多い
      t.integer :gender
     # 日付 生年月日
      t.date :birthday
     # メールの通知設定 デフォルトはfalseにしておく
      t.boolean :subscribed, default: false
      t.timestamps
    end
  end
end

user(user_id)がないと絶対に保存できません

t.references :user, null: false

データベースに反映させる

rails db:migrate

userとprofileを関連付ける

t.references :userによりデータベース上は紐づいたので、rails上(ActiveRecord)でも関連付けていく

ユーザーはひとり「user(単数形)」、プロフィールもひとつ「profile(単数形)」と書くこと


userにprofileを関連付ける

app/models/user.rbを開く

  • 「userはprofileをひとつ持っている(has_one)」
  • 「userを消したら、profileも削除するよ(dependent: :destroy)」

has_many :comments, dependent: :destroy

profileにuserを関連付ける

app/models/profile.rbを開く

「profileはuserに所属(belongs_to)している」

class Profile < ApplicationRecord
  belongs_to :user
end

プロフィールを表示させる

config/routes.rbを開く

  1. resourcesではなく、resourceを使う
  2. resourceの場合、indexが作成されない
    → profileは1つなので、showがあれば良い
  3. さらに、resourceの場合は:newや:createも使わない
    → :editと:updateのみ使うことが多い
Rails.application.routes.draw do
 # 中略
  resources :articles do
    resources :comments, only: [:new, :create]
  end

  resource :profile, only: [:show, :edit, :update]
end

ログインしていないと触れないようにする

app/controllers/profiles_controller.rbを作成する

controllerでは必ず複数形「profiles」で書くこと

  before_action :authenticate_user!

authenticate_user → ログインしているユーザー


プロフィールを取得する

  def show
    @profile = current_user.profile
  end

user.rbの中でhas_one :profileと定義しているため、.profileでプロフィールを取得できる

class User < ApplicationRecord
 #中略
  has_one :profile, dependent: :destroy
end

viewで表示できるようにする

app/views/profiles/show.html.hamlを作成する

profiles_controller.rbなので、profilesのフォルダを作る


profileのリンクを貼る

layouts/application.html.hamlにプロフィールのリンクを貼る

= link_to 'プロフィール', profile_path


editのリンクも貼っておく

= link_to 'Edit', edit_profile_path

profilesではなく、ひとつだけなのでprofileになる

メソッド説明
resources複数ある
例)記事・コメント
resourceひとつしかない
例)プロフィール

#DAY23