0

私の見解では、次のようなものがあります。そして、私はこれがなぜ起こっているのかを理解しようとしています:

<% unless @question.answers.empty? %>
  <% @question.answers.each do |answer| %>
    <%= render :partial => '/answers/answer', :locals => { :question => @question, :answer => answer } %>
  <% end %>
<% end %>

問題:あるべきときに@question.answers.empty?戻る。nullオブジェクトがあり、代わりに戻りますfalsetrueanswer@question.answers.length10

例:[#<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を示します。

4

1 に答える 1

2

あなたはおそらくこれに沿ってあなたのコントローラーに何かを持っています:

@answer = @question.answers.build

これは、新しい回答のオブジェクトを作成し、それを@question.answersオブジェクトに追加することです。.newの代わりに試してみることをお勧めします。そう.buildすれば、ローカルに含まれなくなります@question.answersRails3のビルドと新規を参照してください

于 2013-01-25T02:00:39.763 に答える