0

クライアントを取得するのに役立つこの単純なメソッドがヘルパーにあるとしましょう。

def current_client 
  @current_client ||= Client.where(:name => 'my_client_name').first
end

今呼び出すとこれがcurrent_client返されます:

#<Client _id: 5062f7b851dbb2394a00000a, _type: nil, name: "my_client_name">

完全。クライアントにはいくつかの関連ユーザーがいます。最後のユーザーを見てみましょう。

> current_client.user.last
#<User _id: 5062f7f251dbb2394a00000e, _type: nil, name: "user_name">

後でnewメソッドでこれを呼び出します:

@new_user = current_client.user.build

そして今、驚いたことに、コールはリターンをcurrent_client.user.last返します

#<User _id: 50635e8751dbb2127c000001, _type: nil, name: nil>

ただし、ユーザー数は変わりません。言い換えれば、新しいユーザーは追加されませんが、1人のユーザーが欠落しています...これはなぜですか?どうすれば修理できますか?

4

1 に答える 1

1

current_client.users.countデータベースにラウンドトリップして、関連付けられているユーザーレコードの数を把握します。新しいユーザーはまだ保存されていないため(ビルドされているだけです)、データベースはそれを認識していません。

current_client.users.lengthRubyを使用してカウントを取得します。

current_client.users.count # => 2
current_client.users.length # => 2
current_client.users.build
current_client.users.count # => 2
current_client.users.length # => 3
于 2012-09-26T21:54:11.520 に答える