2017-03-06 8 views
0

私はこれを解決できないようです。私を助けてください。投稿とコメントのモデルがあります。Ruby on Rails:Post.comments.last get id error

post.rb 
has_many :comments 

このコメントモデルです:私のポストモデルは次のようになります私のポストインデックスビューで

comment.rb 
belongs_to :comment 

、私はこのコードを書いた:

index.html.erb 
<tbody> 
     <% @Posts.each do |post| %> 
      <tr> 
      <td><%= post.comments.last %></td> 
      </tr> 
     <% end %> 
     </tbody> 

これが動作しているようですし、私にこの値を与える:

#<Comment:0x007f6b34bfca88> 

しかし、私はこれにコードを変更するとき:

<tbody> 
     <% @Posts.each do |post| %> 
      <tr> 
      <td><%= post.comments.last.id %></td> 
      </tr> 
     <% end %> 
     </tbody> 

をそれは私が達成したかった何

undefined method `id' for nil:NilClass 

が私の見解では最後のコメントのIDを取得することでした。このエラーが発生します。あなたがこの問題に答えるなら、私に教えてください。ありがとう!

+1

はコメントがありませんあなたの記事の1のように見えるコメントはありませんコメントがありid、および空のセルを返します

<tbody> <% @Posts.each do |post| %> <tr> <td><%= post.comments.last.try(:id) %></td> </tr> <% end %> </tbody> 

。あなたのコードを 'post.comments.last.try(:id)'に変更してください。 – moveson

+0

@movesonねえ、それは動作します!ありがとうございます! :) – Lorelyn

答えて

4

投稿がコメントを持たないようです - したがってpost.comments.lastnilを返します。元のコードでは、テーブルの空のセルになりました。

これを試してみてください:

+0

Ruby 2.4を使用している場合、 'last.com'が' nil'なら 'nil'を返し、エラーを投げない新しい構文' post.comments.last&.id'もあります。 – Iceman

+0

ありがとう@ReggieBそれは今動作します。問題は、他の投稿には空のコメントがあるが、他にはコメントがあるということでした。問題はコメントのない投稿からのものであるとは思わなかった。ありがとう! – Lorelyn

+0

@Lorelynそれは問題ではありません、**もしあなたが 'try'または'&.'を使用していれば。存在しないものにアクセスすることはできません。したがって、あなたの投稿の中にコメントがあり、そうでないものがある場合は、それを処理する必要があります。 – meagar