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がnilのエントリを見つけることにしました。私はそれらを削除し、すべてが想定どおりに機能します。

于 2012-07-31T19:00:10.940 に答える