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>

但用户数不会改变。换句话说 - 它没有添加新用户,但缺少一个用户......这是为什么呢?我该如何修复它?

4

1 回答 1

1

current_client.users.count对数据库进行往返以确定关联的用户记录数。由于尚未保存新用户(它只是被构建),数据库不知道它。

current_client.users.length将使用 Ruby 为您提供计数。

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 回答