假设我的助手中有这个简单的方法可以帮助我检索客户端:
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>
但用户数量不会改变。换句话说 - 它不会添加新用户,但缺少一个用户......为什么会这样?我该如何修理?
答案 0 :(得分: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