#find_or_initialize_byって?
モデルから渡したパラメーターに該当するものを探してくれるんだけど、あればそれを返すし、なかったらnewしてインスタンスを作ってくれるみたい!
似たようなメソッドでfind_or_create_by
というcreate
してくれるものもあるらしい。
profile.update_attributes(profile_params)
でバリデーションにひっかからなかったら(create
orupdate
してくれる!)
reviews_controller.rb
def create_profile
session[:review_area_key] = params[:review_area_key]
session[:review_provider_id] = params[:review_provider_id]
session[:review_plan_id] = params[:review_plan_id]
profile_params = params.permit(:nickname, :gender, :icon, :icon_color, :age, :prefecture,
:provider_id, :plan_id, :month, :price, :from, :is_hikkoshi)
session[:profile_params] = profile_params
profile = UserProfile.find_or_initialize_by(user_id: current_user.id) ⭐️ここ
if profile.update_attributes(profile_params)
if (alerts = alerts_if_no_review_plan(params)).blank?
redirect_to reviews_new2_path
else
redirect_to reviews_new_path(f: params[:from]), alert: alerts
end
else
redirect_to reviews_new_path(f: params[:from]), alert: profile.errors.full_messages
end
end