

どこのコードが悪くて、idを拾えないのかわかりません。  
ご教授お願いいたします。

[![エラー](https://i.stack.imgur.com/HyHo7.png)](https://i.stack.imgur.com/HyHo7.png)  
**コントローラー people_controller.rb**

[code]

    class PeopleController < ApplicationController
      layout 'people'
    def index
      @msg = 'Person data.'
      @data = Person.all
    end
    def show
      @msg = "Indexe data."
      @data = Person.find(params[:id])
    end
    def find
      @msg = 'please type search word...'
      @people = Array.new
      if request.post? then
        obj = Person.find params['find']
        @people.push obj
      end
    end
    
[/code]

**ビュー show.html.erb**

[code]

    <h1>People#index</h1>
    <p>
        <%= @msg %>
    </p>
    <pre>
    <table>
      <tr><th>Id</th>
        <td><%= @data.id %></td></tr>
      <tr><th>Name</th>
        <td><%= @data.name %></td></tr>
      <tr><th>Age</th>
        <td><%= @data.age %></td></tr>
      <tr><th>Mail</th>
        <td><%= @data.mail %></td></tr>
    </table>
    </pre> 
    
[/code]

**ビュー find.html.erb**

[code]

    <h1>People#Find</h1>
    <p>
        <%= @msg %>
    </p>
    <table>
      <%= form_tag(controller: "people", action: "find") do %>
      <tr><th>FIND</th>
        <td><%= text_field_tag("find") %></td>
      <tr>
        <td><%= submit_tag("Click") %></td>
      </tr>
     <% end %>
    </table>
    <table>
      <tr>
        <th>Id</th>
        <th>Name</th>
        <th>Age</th>
        <th>Mail</th>
      </tr>
      <% @people.each do |obj| %>
        <tr>
          <td><%= obj.id %></td>
          <td><%= obj.name %></td>
          <td><%= obj.age %></td>
          <td><%= obj.mail %></td>
        </tr>
       <% end %>
     </table>
    
[/code]

**ルート routes.rb**

[code]

    get 'people/:id', to: 'people#show'
    get 'people/find', to: 'people#find'
    post 'people/find', to: 'people#find'
    
[/code]

**データベース db < migrate < hoge_create_people.rb**

[code]

    class CreatePeople < ActiveRecord::Migration[5.0]
      def change
        create_table :people do |t|
          t.text :name
          t.integer :age
          t.text :mail
    
          t.timestamps
        end
      end
    end
    
[/code]

**ビューのキャプチャ**

[![一覧](https://i.stack.imgur.com/VHqZB.png)](https://i.stack.imgur.com/VHqZB.png)


CC BY-SA 3.0
2017-06-17T18:33:35.370
35668
2017-06-18T03:39:00.810
2017-06-17T19:01:07.117
3068
23863
question
ruby-on-rails ruby
検索 findアクション追加後にshowアクションでActiveRecord::RecordNotFoundエラーが発生する


エラー情報に

[code]

    app/controllers/people_controller.rb:11:in `show'
    
[/code]

および

[code]

    Parameters
    
    {"id" => "find"}
    
[/code]

とありますね。

ルーティング規則は上から見ていって最初にリクエストにマッチしたものが使われるので、

[code]

    get 'people/:id', to: 'people#show'
    get 'people/find', to: 'people#find'
    
[/code]

の順で書くと、 `/people/find` は `people/:id` を `:id` => `"find"` というパラメータで呼び出したと解釈され、
`show` アクションにルーティングされます。


CC BY-SA 3.0
2017-06-18T03:39:00.810
35676
2017-06-18T03:39:00.810
17037
35668
answer