rails has_many通过一个新元素

时间:2012-07-27 22:58:00

标签: ruby-on-rails ruby ruby-on-rails-3

我有以下型号:

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?

1 个答案:

答案 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。我删除了那些,一切正常。