私はモデルPerson
を持っていて、私のウェブサイトのホームページにすべての「人」をリストしたいと思います。定義されていないメソッド `each 'for nil:NilClass - ホームページ上でのみレンダリングするとき
私はこのために部分的な_index.html.erbを作成しました。したがって、私のウェブサイトのどこでもこのリストを使用することができました。 index.html.erbでは、私はこの部分をレンダリングします。
http://localhost:3000/people/とhttp://localhost:3000/people/indexの両方が正常に実行されます。しかし、私はまた、私のホームページでインデックスの部分を使いたいと思っていました。そこでは、それは次のエラーを与える:
undefined method `each' for nil:NilClass
私のコードのいくつかの部分:
人/ _index.html.erb
<h2>The following people exist:</h2>
<table>
<tr>
<th>Name</th>
</tr>
<% @people.each do |p| %>
<tr>
<td><%= p.name %></td>
</tr>
<% end %>
</table>
人/ index.html.erb
<%= render 'people/index' %>
pa GES/index.html.erb(これは私のホームページです)
<h1>Homepage</h1>
<%= render 'people/new' %>
<%= render 'people/index' %>
routes.rbを:
Rails.application.routes.draw do
root 'pages#index'
get 'pages/index'
get 'people/index'
resources :people
end
people_controller.rbのパート:どういうわけか
class PeopleController < ApplicationController
def index
@people = Person.all
end
def show
@person = Person.find(person_params)
end
...
、レンダリング私が<%= render 'people/index' %>
をコメントアウトすると、人々/新しい(部分的にも)完全にうまく動作します。
このエラーを検索すると、主に「あなたがコントローラーで@peopleを正しく定義していませんでした」という解決策が導かれます。ただし、/ people/indexページではうまく動作しますが、ホームページでレンダリングするときにはうまくいかないのはなぜですか?ルーティングの問題ですか?
私の質問がはっきりしていて、十分なコードスニペットを投稿していただき、ありがとうございました。
こんにちは、助けてくれてありがとう!ホームページから私は部分的な_indexを呼び出します。これは、ページを「給油する」アクションがPeopleController内のアクション「インデックス」であることを意味します。そしてそこに私は本当にPerson.allに@peopleを設定しました.... 私は部分的に呼んでいるのですか? – Teresa
@ user133910 "PeopleController内でアクション 'indexing'となるページに「燃料を供給する」アクションがあります - あなたはホームページを開いていませんか?この場合、PeopleControllerはそれとは関係ありません。 –
確かに、それが私のミスをした場所です!私は '@ people'を私のPagesControllerに追加し、問題は解決されました。ありがとう! – Teresa