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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

248閲覧

URIは変わっていないのに別のページが出力されてしまう

TsutomuTazawa

総合スコア10

Ruby on Rails 5

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/12/06 11:54

###前提・実現したいこと
目的のrouting設定にしたい

###発生している問題・エラーメッセージ
rails で簡単な入力フォームと結果表示のページを作成中ですが
http://XXX.XXX.XXX.XXX/requirements/list
にアクセスを試みた際に、なぜかrouteやControllerで設定していないはずの
http://XXX.XXX.XXX.XXX/requirements/show の画面が出力されてしまいます。
(ブラウザ上のURLは http://XXX.XXX.XXX.XXX/requirements/list のまま)
なぜそうなってしまうのかわかる方いらっしゃいましたらご教授いただけますでしょうか。。。

Controller名:Requirements(show, index, list, new, create)
Model名:Requirement
(db:migrate済み 実際にDB上に値が保存されるところまでを確認しています)

http://XXX.XXX.XXX.XXX/requirements/list

1Started GET "/requirements/list" for XXX.XXX.XXX.XXX at YYYY-MM-DD HH:MM:DD +0900 2Processing by RequirementsController#show as HTML 3 Parameters: {"id"=>"list"} 4 Rendering requirements/show.html.erb within layouts/application 5 Rendered requirements/show.html.erb within layouts/application (0.5ms) 6Completed 200 OK in 60ms (Views: 59.1ms | ActiveRecord: 0.0ms)

###該当のソースコード

app/controllers/requirements_controller.rb ----------------------------------------------------------- class RequirementsController < ApplicationController def list @requirement = Requirement.all end def new @requirement = Requirement.new end def show end def create @requirement = Requirement.new @requirement.hostname = params[:requirement][:hostname] @requirement.cpu = params[:requirement][:cpu] @requirement.memory = params[:requirement][:memory] @requirement.save redirect_to '/requirements/list' end end
config/routes.rb ----------------------------------------------------------- Rails.application.routes.draw do resources :requirements match '/requirements/index', to: 'requirements#index', via: 'get' match '/requirements/show', to: 'requirements#show', via: 'get' match '/requirements/list', to: 'requirements#list', via: 'get' match '/requirements/new', to: 'requirements#new', via: 'get' match '/requirements/search', to: 'requirements#search', via: 'get' post "requirements/new" => "requirements#create" end
app/views/requirements/list.html.erb ----------------------------------------------------------- <h1>Requirements List</h1> <div class="table-responsive"> <table class="table table-striped"> <thead> <tr> <th>Hostname</th> <th>CPU</th> <th>Memory</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @requirement.each do |requirement| %> <tr> <td><%= requirement.hostname %></td> <td><%= requirement.cpu %></td> <td><%= requirement.memory %></td> </tr> <% end %> </tbody> </table> </div>
[XX]$ rails routes Prefix Verb URI Pattern Controller#Action requirements GET /requirements(.:format) requirements#index POST /requirements(.:format) requirements#create new_requirement GET /requirements/new(.:format) requirements#new edit_requirement GET /requirements/:id/edit(.:format) requirements#edit requirement GET /requirements/:id(.:format) requirements#show PATCH /requirements/:id(.:format) requirements#update PUT /requirements/:id(.:format) requirements#update DELETE /requirements/:id(.:format) requirements#destroy requirements_index GET /requirements/index(.:format) requirements#index requirements_show GET /requirements/show(.:format) requirements#show requirements_list GET /requirements/list(.:format) requirements#list requirements_new GET /requirements/new(.:format) requirements#new requirements_search GET /requirements/search(.:format) requirements#search POST /requirements/new(.:format) requirements#create

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

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

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

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

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

guest

回答1

0

ベストアンサー

この場合、手動で追加したmatchのルーティングは、全く使われません。

というのも、/requirements/listとした場合に、先にresourcesに含まれる/requirements/:idの方にヒットしてしまって、「id=list」としてshowを呼んでしまうからです。

せっかくresourcesを使うのなら、listは作らず、標準の7つにあるindexGET /requirements)を使ったほうがいいと思います。

投稿2017/12/06 12:08

maisumakun

総合スコア145184

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

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

TsutomuTazawa

2017/12/06 13:54

なるほど、、、WEB上の情報をもとに適当に書いてしまったresoucesでしたが、そういった動きになるとは知りませんでした・・・。 indexについても勉強になりました。 /requirements/ に飛ばすことで、目的のリストを出せるようになりました!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問