2012-07-27 89 views
1

我有以下型號:軌新元素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

回答

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。我刪除了這些和一切工作假設。