1

我有以下模型:

class Party < ActiveRecord::Base
  has_many :party_characters
  has_many :characters, :through => :party_characters
  ...

在我的控制器上,我有以下代码:

def new
  @party = Party.new
  p @party.characters.any?
  p @party.characters
  p @party.characters.any?
  ...

这会将以下内容写入控制台:

true
[]
false

为什么该any?方法在打印之前返回true,之后返回false?

4

1 回答 1

0

在控制台上尝试了同样的事情,得到了以下结果

1.9.3p0 :003 > p = Party.new
 => #<Party id: nil, name: nil, created_at: nil, updated_at: nil> 
1.9.3p0 :004 > p.characters.any?
   (17.9ms)  SELECT COUNT(*) FROM "characters" INNER JOIN "party_characters" ON "characters"."id" = "party_characters"."character_id" WHERE "party_characters"."party_id" IS NULL
 => true 
1.9.3p0 :005 > p.characters
 => [] 
1.9.3p0 :006 > p.characters.any?
 => false 

所以我决定检查一下我在party_characters 表上的内容,并找到了具有有效character_id 但派对ID 为零的条目。我删除了这些,一切都按预期工作。

于 2012-07-31T19:00:10.940 回答