ArgumentErrorについて

初めに

  • Progateにて躓いたところをアウトプットして学習効率を上げるために書きます。

  • 備忘録としての意味もあります。

  • めちゃめちゃ初歩的なエラーですが、お付き合いいただければ幸いです。

背景

  • userのshowページにeditページへのリンクを作成し、editページに遷移させるまでの流れを作ります

エラー内容

  • ArgumentError

  • メソッドの引数が正しくない時や足りない時に発生するエラー

  • ターミナル上でThis can lead to potential routing problemsの記載あり

コード

routes.rb
Rails.application.routes.draw do


  post "users/create" => "users#create"
  get "signup" => "users#new"
  get "users/index" => "users#index"
  get "users/:id" => "users#show"
  get "users/:id/edit" => "#users/edit"
  get "posts/index" => "posts#index"
  get "posts/new" => "posts#new"
  get "posts/:id" => "posts#show"
  post "posts/create" => "posts#create"
  get "posts/:id/edit" => "posts#edit"
  post "posts/:id/update" => "posts#update"
  post "posts/:id/destroy" => "posts#destroy"
  
  get "/" => "home#top"
  get "about" => "home#about"
end
users_controller
class UsersController < ApplicationController
  def index
    @users = User.all
  end
  
  def show
    @user = User.find_by(id: params[:id])
  end
  
  def new
    @user = User.new
  end
  
  def create
    @user = User.new(name: params[:name], email: params[:email])
    if @user.save
      flash[:notice] = "ユーザー登録が完了しました"
      redirect_to("/users/#{@user.id}")
    else
      render("users/new")
    end
  end
  
  # editアクションを作成してください
  def edit
    @user = User.find_by(id: params[:id])
  end
  
end
users/show
<div class="main user-show">
  <div class="container">
    <div class="user">
      <h2><%= @user.name %></h2>
      <p><%= @user.email %></p>
      <!-- ユーザー編集ページへのリンクを作成してください -->
      <%=link_to("編集","/users/#{@user.id}/edit")%>
      
      
    </div>
  </div>
</div>
users/edit
<div class="main users-edit">
  <div class="container">
    <div class="form-heading">ユーザー情報の編集</div>
    <div class="form users-form">
      <div class="form-body">
        <p>ユーザー名</p>
        <!-- nameを初期値として表示してください -->
        <input value="<%=@user.name %>" >
        <p>メールアドレス</p>
        <!-- emailを初期値として表示してください -->
        <input value="<%=@user.email%>">
        <input type="submit" value="保存">
      </div>
    </div>
  </div>
</div> 

考えたこと

  • rails sをターミナルで打った時にはエラーが生じているので、ルーティングに問題がある?

  • ルーティングの順番に問題がある?

  • This can lead to potential routing problemsより綴りが間違っている?

修正

  • get "users/:id/edit" => "#users/edit"→get "users/:id/edit" => "users#edit"

  • ルーティングの大枠は変わらないので、上下のルーティングを見ながら書けばよかった。