私の見解では、次のようなものがあります。そして、私はこれがなぜ起こっているのかを理解しようとしています:
<% unless @question.answers.empty? %>
<% @question.answers.each do |answer| %>
<%= render :partial => '/answers/answer', :locals => { :question => @question, :answer => answer } %>
<% end %>
<% end %>
問題:あるべきときに@question.answers.empty?
戻る。nullオブジェクトがあり、代わりに戻りますfalse
true
answer
@question.answers.length
1
0
例:[#<Answer id: nil, body: nil, user_id: nil, created_at: nil, updated_at: nil, question_id: 18>]
しかし、もっと紛らわしいのは、コンソールでそれを行うと、@ question.answers.empty?trueを返し、長さは0になります。なぜこうなった?
1.9.3-p327 :001 > question = Question.find(18)
Question Load (12.2ms) SELECT "questions".* FROM "questions" WHERE "questions"."id" = $1 LIMIT 1 [["id", 18]]
=> #<Question id: 18, body: "sddd", user_id: 7, created_at: "2013-01-25 01:47:06", updated_at: "2013-01-25 01:47:06">
1.9.3-p327 :002 > question.answers.length
Answer Load (0.7ms) SELECT "answers".* FROM "answers" WHERE "answers"."question_id" = 18
=> 0
1.9.3-p327 :003 > question.answers
=> []
さらに、特定の質問の長さは、インデックスページに0、ショーページに1を示します。