【rails】プロフィールを編集する

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

プロフィールを編集する

前回までで、フォームからプロフィールを作成、保存することができた

今回は、作成したプロフィールを編集できるようにする


編集画面で今のプロフィールを表示させる

現状、@profileにはbuild_profile(何も入っていない)が渡されている

  def edit
    @profile = current_user.build_profile
  end

そのため、プロフィールの編集画面には初期表示がなにもない(空っぽなので)

  1. もしcurrent_userprofileが存在(present?)するなら表示させる
  2. なければ、build_profile(空の状態)を表示させる
  def edit
    if current_user.profile.present?
      @profile = current_user.profile
    else
      @profile = current_user.build_profile
    end
  end

値がある場合はそのまま渡すのが基本!


もっと省略して書く方法

  1. @profileには、current_user.profileがあるならそれを渡す
  2. または(||)、build_profile(空のprofile)を渡す
  def edit
    @profile = current_user.profile || current_user.build_profile
  end

この書き方はよく使う


よく使うパターンなので、モデルに定義する

app/models/user.rbを開く

prepare_profileは、profileもしくはbuild_profile(空のprofile)と定義する

  def prepare_profile
    profile || build_profile
  end

profiles.controller.rbでは以下のように書くことができる

  def edit
    @profile = current_user.prepare_profile
  end

かなりすっきりする!


既存のデータを元に更新する

現在、インスタンス(空の@profile)を新しく作ってから、パラメーターを渡している

でも既存のデータを元にassign_attributes(更新)したい

  def update
    @profile = current_user.prepare_profile
    @profile.assign_attributes(profile_params)
  1. @profile = current_user.prepare_profile
    • current_user.profile(既存のprofile)があるならそれを渡す
    • ないなら、build_profile(空のprofile)を渡す
  2. @profile.assign_attributes(profile_params)
    • @profileに、profile_params(更新内容)を入れる
    • assign_attributes(更新)する

resourcesではなくresourceで、profileのようにひとつしかないデータを作る場合、editとupdateだけで対応することが多い


やっていることはずっと同じ

流れ(CRUD)はどれも同じなので、やっていくうちに覚えればok!

  1. インスタンスを用意する
  2. インスタンスに値をいれる
  3. インスタンスをセーブする

#DAY23