0
0

【Rails】No route matchesが起きた不思議な理由

Posted at

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

ここを直したらエラーが出なくなりました。
最初に出たエラーたちはなんだったんだろう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0