※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。
プロフィールの編集フォームを作る
前回までで、プロフィールページに自身の記事一覧も表示させることができた
今回はプロフィールの編集フォームを作る
フォームさえあれば、edit
はnew
としても使える
(今回、new
のviewなし)
app/views/profile/edit.html.hamlを開く
%ul
- @profile.errors.full_messages.each do |message|
%li= message
- articles/_form_html.hamlにすでにあるのでコピーしてくる
- articleを@profileに修正する
app/controllers/profiles_controller.rbを開く
def edit
@profile = current_user.build_profile
end
複数じゃなくて、ひとつしかないとき
→ current_user.build_モデル名
(単数形)とする
上記の続きでform_with
を書き始める
= form_with(model: @profile, url: profile_path,
method: 'put',local: true) do |f|
%div
= f.label :nickname, 'ハンドルネーム'
%div
= f.text_field :nickname, class: 'text'
%div
= f.label :introduction, '自己紹介'
%div
= f.text_area :introduction
editしてupdateするので、putリクエストになる
性別はセレクトボックスで選べるようにする
「男」「女」「男性」「female」など、文字列だと複数のパターンがうまれてしまう
models/profiles.rbを開く
gender:
に対して「男性:0」「女性:1」「その他:2」を定義する
class Profile < ApplicationRecord
enum gender: { male: 0, female: 1, other: 2 }
これにより、Profile.genders.keys
で値が取れるようになる
app/views/profiles/edit.html.hamlに書き加える
%div
= f.label :gender, '性別'
%div
= f.select :gender, Profile.genders.keys
= f.select :gender, [ 'male', 'female', 'other' ]
でも同じようにセレクトボックスに表示されるが、モデルの内容を変更したときに反映されない
Profile.genders.keysとしておくと都合が良い
class
を付けたいとき、第4引数にclass:
を渡さないといけない
= f.select :gender, Profile.genders.keys, {}, { class: 'text' }
# 1 2 3 4
セレクトボックスを作るとき、実際は↑のように引数になっている
4つ目の引数を作るために、3つ目に空の引数{}
を渡す
これまでの続きにフォームを書き足していく
%div
= f.label :birthday, '生年月日'
%div
= f.date_field :birthday , class: 'text'
%div
= f.label :subscribed, '通知を受け取る'
= f.check_box :subscribed
= f.submit '保存', class: 'btn-primary'
date_field
(今回は生年月日)を入力するために、カレンダーがrailsで用意されている
#DAY23