Ich kann das anscheinend nicht klären. Bitte helfen Sie mir. Ich habe ein Post- und Kommentarmodell. Mein Postmodell sieht folgendermaßen aus:
post.rb
has_many :comments
Dies ist das Kommentarmodell:
comment.rb
belongs_to :comment
In meiner Post-Index-Ansicht habe ich diesen Code geschrieben:
index.html.erb
<tbody>
<% @Posts.each do |post| %>
<tr>
<td><%= post.comments.last %></td>
</tr>
<% end %>
</tbody>
Dies scheint zu funktionieren und gibt mir diesen Wert:
#<Comment:0x007f6b34bfca88>
aber wenn ich zum Code dazu wechsle:
<tbody>
<% @Posts.each do |post| %>
<tr>
<td><%= post.comments.last.id %></td>
</tr>
<% end %>
</tbody>
Es gibt mir diesen Fehler
undefined method `id" for nil:NilClass
Was ich erreichen wollte, war, die ID des letzten Kommentars aus meiner Sicht zu erhalten. Wenn Sie eine Antwort auf dieses Problem haben, lassen Sie es mich wissen. Vielen Dank!
Antworten:
4 für die Antwort № 1Es sieht so aus, als hätten einige Beiträge keine Kommentare - und deshalb post.comments.last
kehrt zurück nil
. In Ihrem ursprünglichen Code führte dies nur zu einer leeren Zelle in Ihrer Tabelle.
Versuche dies:
<tbody>
<% @Posts.each do |post| %>
<tr>
<td><%= post.comments.last.try(:id) %></td>
</tr>
<% end %>
</tbody>
Das wird ein zurückgeben id
wo es Kommentare gibt, und eine leere Zelle, wo es keine Kommentare gibt