2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ActionController::UrlGenerationErrorに遭遇しました

2
Last updated at Posted at 2021-08-23

オリジナルのアプリを製作中に始めて遭遇したエラーです。
今までは教材の通りにルーティングを組んで、パスもそれに会うように指定していました。
忘れないように記録しておきます。

ActionController::UrlGenerationError

さて今回遭遇したエラーですが、読んだ感じ、Urlの作成でミスがあるんだと思いルーティングを確認してみました。

エラーが出た場面ですが、ヘッダーからマイページに遷移するときでした。
なのでマイページのアクションを指定した箇所をチェック、、、

resources :users, only: [:update, :mypage] do
    member do
      get 'mypage', :to => "users#mypage"
      get 'mypage/edit', :to => "users#edit"
      put 'mypage', :to => "users#update"
    end
  end

resourcesとmemberで各アクションを行う際にidを含めることを指定しています。
今だからわかるのですが、何で動かへんの??と結構ハマってました
memberを外して、collectionにした場合は上手く遷移できたのでlink_to
に渡しているパスとコントローラーがルーティングと合っていないのかなと思いました

*この辺調べながらだったので間違って書いていたら教えていただけると幸いです

_header.html.erb
    <ul class="navbar-nav">
        <% if user_signed_in? %>
          <li class="nav-item list-inline-item mypage-link">
             <%= link_to mypage_user_path, class: "nav-link " do %>
               <i class="fas fa-user-circle mr-2"><label>マイページ</label></i>
             <% end %>
             <%= link_to "ログアウト", destroy_user_session_path, method: :delete, class: "nav-link" %>

                                         〜(以下略)〜

これだけじゃ上手くいってるような気がしてならなかったのですが、エラー文で検索していたところ同じエラーに遭遇している人がいらっしゃったので記事を参考にして訂正したら上手くいきました。

結果から言うと、memberで動かないのにcollectionで動いたのは違いがあるようで、memberで指定したルーティングはurlにidを含めて、collectionは含めないようです。

だからmypage_users_pathだとどこのidを取ってくるか指定していないからmemberでは動かないみたいです。

そこでmypage_user_pathに引数として,
current_user(deviseで使えるようになるヘルパーメソッドでログインしているユーザーのこと)を指定してマイページに遷移するときはcurrent_userのidを取ってきてねという風になると思います!

そしてマイページにはUserモデルのカラムを表示させてマイページを作りました。
ルーティング難しいですね。。。。
そもそもidを含める時と含めない時でどう使い分けるのか分かっていないからこんなエラーが出てしまうのだと思います
自分で調べてみますが、有識者の方ご教示いただけると幸いです。

間違いがある場合も教えていただきたいです!

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?