我有以下型号:
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之前返回true而在之后返回false?
答案 0 :(得分: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但是有一个nil方id。我删除了那些,一切正常。