#UserモデルとProfileモデルで1対1の関連付けを行う。
profile.rb
class Profile < ApplicationRecord
belongs_to :user
end
user.rb
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
has_many :memos
has_one :profile
end
#profiles_controllerにnewアクション、createアクションを定義
ここで大事なのは、1対1の関連の時はbuildではなくbuild_モデル名の書き方になる
profiles_controller.rb
def new
#@profile = current_user.profile.buildだと動かない。
@profile = current_user.build_profile
end
def create
@profile = current_user.build_profile(profile_params)
@profile.assign_attributes(profile_params) #.assign_attributesは変更するだけで保存はしない。フォームから送られてきた値(profile_params)を保存できなかった場合、記入していた文字がそのまま残ってrenderされる
if @profile.save
flash[:success] = "名前を登録しました"
redirect_to root_url
else
flash[:danger] = "名前の登録に失敗しました"
render :edit
end
end
これで通常通り動きます。
そんなん知らへんやん普通、、
そんなん言うというてや、、
参考
https://qiita.com/SpicyCoffee/items/cfeb728c63f946976cc0
https://gist.github.com/seak0503/7291012e7e99fc8aca80