2012-09-26 55 views
0

我有一個關於一對多的關係,我沒有得到的行爲,它絕對讓我瘋了。一對多的關係行爲

這裏是模型1:

class Account < ActiveRecord::Base 
    belongs_to :organization, :autosave => true 
    validates :organization, :presence => true 
end 

下面是模式2:現在

class Organization < ActiveRecord::Base 
    has_many :accounts, :autosave => true 
    validates :accounts, :presence => true 
end 

,在Rails控制檯:

>> acc = Account.new 
>> org = Organization.new 
>> org.accounts << acc 

>> org.accounts 
[#<Account id: nil, organization_id: nil, created_at: nil, updated_at: nil>] 

>> acc.organization 
nil 

或周圍的其他方法:

>> acc = Account.new 
>> org = Organization.new 
>> acc.organization = org 

>> acc.organization 
#<Organization id: nil, created_at: nil, updated_at: nil> 

>> organization.accounts 
[] 

這是正常行爲嗎?我應該手動更新雙方的關係?

+0

儘量節省acc.save和檢查 – Amar

+0

我不想保存對象,這將引發了許多其他不應該發生的事件。 :) – muichkine

回答

1

答案很簡單隻需要保存對象第一

acc = Account.new 
org = Organization.new 
acc.organization = org 
acc.save 
1

參考this使用build

org = Organization.new 
acc = org.build_account.new 
org.save 
+0

嗯, >> org = Organization.new #<組織ID:無,created_at:nil,updated_at:無> >> acc = org.accounts.build() #<帳戶ID:無,organization_id :無,類型:nil,created_at:nil,updated_at:nil >> acc #<帳戶ID:無,名稱:「Main」,country_id:nil,currency_id:無,organization_id:無,類型:nil, created_at:nil,updated_at:nil >> acc.organization nil – muichkine

+0

好的格式化很糟糕,但它意味着什麼,直到你保存組織,你仍然沒有雙向鏈接。然後我不明白爲什麼用這個而不是僅僅保存。 – muichkine

+0

好吧,我明白了。在組織保存之前,這將不起作用。因此,如果您有2個內存中的對象,則必須以兩種方式分配鏈接。 – muichkine