Rubyのオブジェクトは基本的に全てidメソッドを持っています。 nilもNilClassのオブジェクトなのでnil.idは値(4)を持ちます。
なぜか分からないけど4が出てくるというときにはコレを疑った方がいいかもしれません。
例)members = [$data_actors[1], $data_actors[5], $data_actors[7]] p members[0].id p members[1].id p members[2].id p members[3].id実行結果は
1 5 7 4
となります。存在しないはずのmember[3]のidにアクセスしてもエラーになりません。 member[3]は無効・偽等をあらわす「nil」の値が返るのですが、「nil.id」自体が値を持っているので エラーにならずにそのまま処理されてしまいます。「nil」自体はオブジェクトなので他にもいくつか パラメータを持っています。そもそもそういう場所に「nil」が来る事自体が想定外(バグ)なのですが、 実際よく起こるバグですし「.id」もよく使うパラメーターなので結構ハマります。 慎重を期すなら「object.nil?」(nilなら真)等でチェックした方がいいかもしれません。