2010-12-02 12 views
1

の評価中にエラーが発生しました:ルビー:私はルビーを学ぶためにしようとしているが、私はこのエラーを取得geep nil.each

をnil.each評価しながら

エラーが発生した私がいましたhttp://guides.rubyonrails.org/getting_started.html

ここでは、 "はじめに" ガイドを読むと、ここでindex.html.erbからのコードの一部です:

<h1>Listing snippets</h1> 
<div class="snippets"> 
<% @posts.each do |post| %> 
    <h2><%= post.title %></h2> 
    <p><%= link_to 'View', post %> | <%= link_to 'Edit', edit_post_path(post) %> | <%= link_to 'Delete', post, :confirm => 'Are you sure?', :method => :delete %></p> 
<% end %> 
</div> 

今、私が間違っているのは何posts_controller.rb

def index 
    @posts = Post.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @posts } 
    end 
    end 

@posts VAR?おかげさまで

PS:私は、彼らがここに表示されていることがわかりhttp://127.0.0.1:3000/postsしかし、私は(ルートフォルダでそれらを表示したい場合はhttp://127.0.0.1:3000/エラーが発生した http://guides.rubyonrails.org/routing.html#using-root

:Railsの3.xの

map.root :controller => "posts", :action => "index" 

がここを見て:

答えて

2

partialを作成し、そのポストロジックをその内部に配置する必要があります。

次に、使用されている各コントローラーアクション内でコレクションを初期化する限り、任意のビューに配置できます。

だからあなたのホームコントローラにあなたはまだ必要があるでしょう:

@posts = Post.find(:all) 

限り、あなたの最初の質問として、@posts = Post.find(:all)

+0

チャックが働いてくれてありがとう。 –

+0

問題ありません!ハッピートレイル。 –

1

のRails 2.xの場合のみ)のために(routes.rbをへのルートを追加します。 nil.eachを評価すると@postsは配列ではないことを意味します。投稿テーブルを作成しましたか?

+0

はい、私は/ postsで見ることができますが、私はhome/index.html.erbに表示するためのグローバル変数型を考えていました。そんなことはありますか? –

+0

どのように投稿を見て、同時にnil.eachエラーを得ることができますか?何かが意味をなさない。 –

+0

私はindex.html.erbファイルでのみnil.eachエラーを取得します。実際にはルートですが、/ postsビューではそれらを見ることができます。しかし、私はそれらを家に入れたい(根)。 –

1

経由でエラーがそれらを見つけるしようとは(おそらく疑いがあるとして)あるで起こっ次の行:

<% @posts.each do |post| %> 

何とか@postsは、それがリストであることを望んでいても、終わりなくなります。

これはちょっと変わったことです。上のコードがうまくいくように見えるからです。私はあなたが問題を追跡するのを手伝ってくれるでしょう。

Post.allはPost.find(:all)と等価であり、the documentation for findによればnilを返すことができますが、これは実際にはいつ起きるかはわかりません。通常、データベースに投稿がない場合は空のリスト([])を返し、データベーステーブルが存在しない場合は例外を送出します。

Post.all何らかの理由でnilを返す場合は、コントローラー内で@posts = Post.allの代わりに@posts = []を試してください。.eachがうまくいくはずです。

もし私が思うのであれば、私の推測では、何とかあなたが上に掲示したコントローラとは異なるコントローラが実行されるということです。そして、@postsが一度も設定されていないので、アクセスしようとするとnilが返され、エラーが説明されます。したがって、あなたのパスとクラス名を確認して、実際にが実行されると思われるコードがになるようにしてください。

あなたは何がうまくいかないのかを把握し、問題の解決方法を教えてください。

関連する問題