質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

2803閲覧

[Rails]URI Patternの代わりにPrefix_pathを使ったパスを設定したい

matsu_c

総合スコア7

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/05/12 03:23

編集2020/05/12 03:27

###解決したいこと

ProgateでRailsを学習しています。URI Patternで設定されているパスの代わりにPrefix_pathを使って設定したいのですが、うまくページに飛ばない問題を解決したいです。

###内容

以下はProgate側の模範回答です。link_toメソッド内でのパスがURI Patternで記述されています。

Ruby

1<div class="main users-index"> 2 <div class="container"> 3 <h1 class="users-heading">ユーザー一覧</h1> 4 <% @users.each do |user| %> 5 <div class="users-index-item"> 6 <div class="user-right"> 7 <!-- ユーザー名から、ユーザー詳細ページへ飛ぶように設定 --> 8 <%= link_to(user.name, "/users/#{user.id}") %> 9 </div> 10 </div> 11 <% end %> 12 </div> 13</div>

自分はこのパスをURI Patternではなく、以下の様にPrefix_pathを使って設定してみました。

Ruby

1<%= link_to(user.name, users_index_path(user.id)) %>

しかしうまくページが遷移しません。エラーメッセージは特に表示されず、URLが以下の様に表示が変わるだけでした。

URL

1localhost:3000/users/index.1

参考までに、rails routesコマンドの実行結果とroutes.rbとcontrollerは以下になります。

terminal

1 Prefix Verb URI Pattern Controller#Action 2 users_index GET /users/index(.:format) users#index 3 GET /users/:id(.:format) users#show 4 posts_index GET /posts/index(.:format) posts#index 5 posts_new GET /posts/new(.:format) posts#new 6 GET /posts/:id(.:format) posts#show 7posts_create POST /posts/create(.:format) posts#create 8 GET /posts/:id/edit(.:format) posts#edit 9 POST /posts/:id/update(.:format) posts#update 10 POST /posts/:id/destroy(.:format) posts#destroy 11 GET / home#top 12 about GET /about(.:format) home#about

Ruby

1Rails.application.routes.draw do 2 get "users/index" => "users#index" 3 get "users/:id" => "users#show" 4 5 get "posts/index" => "posts#index" 6 get "posts/new" => "posts#new" 7 get "posts/:id" => "posts#show" 8 post "posts/create" => "posts#create" 9 get "posts/:id/edit" => "posts#edit" 10 post "posts/:id/update" => "posts#update" 11 post "posts/:id/destroy" => "posts#destroy" 12 13 get "/" => "home#top" 14 get "about" => "home#about" 15end

Ruby

1class UsersController < ApplicationController 2 def index 3 @users = User.all 4 end 5 6 def show 7 @user = User.find_by(id: params[:id]) 8 end 9 10end

###試したこと
Prefix_pathのカッコ内の引数の書き方が間違っているのかと思い、以下のパターンでも試してみましたがうまくいきませんでした。

Ruby

1<%= link_to(user.name, users_index_path(user)) %>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

関係ないかもしれませんが、
get "users/index" => "users#index"

get "users" => "users#index"
としたらどうなりますか?

投稿2020/05/12 18:05

gnfreeworks

総合スコア306

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

matsu_c

2020/05/13 00:57

ご回答ありがとうございます。 get "users" => "users#index"としたら、NoMethodErrorが表示されました。(UsersControllerのindexアクションが反応しなくなるからだと思います)
gnfreeworks

2020/05/13 03:23

routes.rbに"resources :users"と書いてターミナルで"rake routes"を実行すると 自動的にルーティングが作成されて下記のようになります。 users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PATCH /users/:id(.:format) users#update PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy なので、URLとController,Actionの組み合わせは、 get "users" => "users#index" で間違っていないと思いますし、Prefixは users_path にしてみるとうまくいく気がするのですが、どうでしょうか?
gnfreeworks

2020/05/13 03:26 編集

showアクションへ飛ぶ場合は、 URLとController,Actionの組み合わせは、 get "users" => "users#show" でPrefixは users_path(user.id) かなと思います。
matsu_c

2020/05/15 15:27

返信が遅くなり申し訳ございません。 routes.rbでresourcesメソッドを使って試してみたらうまくいきました!ありがとうございます! Prefix_pathはresourcesメソッドを使うことで自動で作成されるんですね、勉強になりました。
gnfreeworks

2020/05/16 00:39

無事解決してよかったです! あと、resourcesだと全てのルーティングが作成されてしまいますが、 onlyオプションを使うことで特定のアクションだけのルーティングを指定する事もできますので合わせて使ってみて下さい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問