2013-01-25 146 views
0

在我看来,我有以下几点。而且我想弄清楚这是为什么happneing:与数组对象混淆

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

问题:@question.answers.empty?回报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。

回答

2

你可能在你的控制器东西沿着这一行:

@answer = @question.answers.build 

这是一个新的答案创建一个对象,并将其添加到@question.answers对象。你可能想尝试.new而不是.build,这样它就不会被本地包含在@question.answers中。请参阅Build vs new in Rails 3

+0

这是我从未想过的事情。非常感谢。 –