2012-09-26 51 views
0

比方說,我有我的助手這個簡單的方法,可以幫助我找回客戶:Rails的構建方法修改對象

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

users.count保持不變嗎?或者是users.length保持不變? – 2012-09-26 20:25:24

+0

@ new_user.save 見:[構建方法] [1] [1]:http://stackoverflow.com/questions/783584/ruby-on-rails-how-do-好的,謝謝你的解釋。我使用主動記錄構建方法歸屬於rel – moduleWolf

回答

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 
+0

好的,謝謝你的解釋。 爲了避免這種情況,我將我的新方法更改爲: 'current_client_dup = current_client.dup @user = current_client_dup.user.build' – Krzychu