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"
ルーティングの大枠は変わらないので、上下のルーティングを見ながら書けばよかった。