轨新元素HAS_MANY通过

问题描述:

我有以下型号:轨新元素HAS_MANY通过

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?方法在print和false之前返回true?

+0

it returns false [] false on my box。 – bento 2012-07-27 23:37:13

+0

@bento如果它是任何帮助我使用红宝石1.9.3p0和轨3.2.6 – dcarneiro 2012-07-29 00:08:47

+0

应该足够接近,因为我说,无法再现它 - 你能吗? – bento 2012-07-29 00:16:58

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

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。我删除了这些和一切工作假设。