Railsでプロフィール画面を作成、実装したのだが、エラーが起きた。
いじっているうちにエラーの出方が姿を変え、最終的に「えっここ?」というところを直したら解決したので記録しておく。
プロフィールへのリンクをクリックしても「boardコントローラでprofileのidが見つからない」とエラーが出た。
え、プロフィールの画面へのリンクだからprofileコントローラかuserコントローラしか関係ないし、idを表示させない方法でルーティングを組んでいるので、profile_pathのidがboardコントローラでマッチしないというエラーは、なぜなんだろう・・。と理由が分かりませんでした。
ビューファイルの周辺をいじったりすると逆におかしくなり別のエラーが出たりして直していると、今度は別のエラーが出ました。
「No route matches」
「profile_path」は使えない、というエラーが出ましたが、ルーティングの設定はされており、ターミナルで確認しても使えるはず。
またしてもビューファイルの今度は関係なさそうなリンクを直したりしているとまた別のエラーが出てしまい、元に戻したりしていたら、今度は別のエラーが出ました。
「end」が足りない
profileコントローラでendが足りないというエラーが出たのでみてみると
def update
if @user.update(user_params)
redirect_to profile_path, success: t('defaults.message.updated', item: User.model_name.human)
else
flash.now['danger'] = t('defaults.message.not_updated', item: User.model_name.human)
render :edit, status: :unprocessable_entity
end
private
def set_user
@user = User.find(current_user.id)
end
def user_params
params.require(:user).permit(:email, :first_name, :last_name, :avatar, :avatar_cache)
end
end
updateアクションの最後にendがついていない!
def update
if @user.update(user_params)
redirect_to profile_path, success: t('defaults.message.updated', item: User.model_name.human)
else
flash.now['danger'] = t('defaults.message.not_updated', item: User.model_name.human)
render :edit, status: :unprocessable_entity
end
end
private
def set_user
@user = User.find(current_user.id)
end
def user_params
params.require(:user).permit(:email, :first_name, :last_name, :avatar, :avatar_cache)
end
end
ここを直したらエラーが出なくなりました。
最初に出たエラーたちはなんだったんだろう。