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

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

ただいまの
回答率

91.36%

  • Ruby on Rails

    5076questions

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

  • Ruby on Rails 5

    91questions

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

解決済

回答 1

投稿 2017/12/06 20:54

  • 評価
  • クリップ 0
  • VIEW 44

前提・実現したいこと

目的の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上に値が保存されるところまでを確認しています)

Started GET "/requirements/list" for XXX.XXX.XXX.XXX at YYYY-MM-DD HH:MM:DD +0900
Processing by RequirementsController#show as HTML
  Parameters: {"id"=>"list"}
  Rendering requirements/show.html.erb within layouts/application
  Rendered requirements/show.html.erb within layouts/application (0.5ms)
Completed 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
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

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

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

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

投稿 2017/12/06 21:08

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/06 22:54

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

    キャンセル

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

ただいまの回答率

91.36%

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails

    5076questions

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

  • Ruby on Rails 5

    91questions