※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
プロフィールを編集する
前回までで、フォームからプロフィールを作成、保存することができた
今回は、作成したプロフィールを編集できるようにする
現状、@profile
にはbuild_profile
(何も入っていない)が渡されている
def edit
@profile = current_user.build_profile
end
そのため、プロフィールの編集画面には初期表示がなにもない(空っぽなので)
- もし
current_user
のprofile
が存在(present?
)するなら表示させる - なければ、
build_profile
(空の状態)を表示させる
def edit
if current_user.profile.present?
@profile = current_user.profile
else
@profile = current_user.build_profile
end
end
値がある場合はそのまま渡すのが基本!
@profile
には、current_user.profile
があるならそれを渡す- または(
||
)、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)
@profile = current_user.prepare_profile
current_user.profile
(既存のprofile)があるならそれを渡す- ないなら、
build_profile
(空のprofile)を渡す
@profile.assign_attributes(profile_params)
@profile
に、profile_params
(更新内容)を入れるassign_attributes
(更新)する
resourcesではなくresourceで、profileのようにひとつしかないデータを作る場合、editとupdateだけで対応することが多い
やっていることはずっと同じ
流れ(CRUD)はどれも同じなので、やっていくうちに覚えればok!
- インスタンスを用意する
- インスタンスに値をいれる
- インスタンスをセーブする
#DAY23