2011-03-18 71 views
2

我正在使用Ruby on Rails 3,併成功使用嵌套模型以保存模型\對象關聯。如何檢索剛剛使用嵌套方法創建的帳戶ID?

在用戶模型文件,我有:

class User < ActiveRecord::Base 
    has_one :account 

    accepts_nested_attributes_for :account 
    validates_associated :account 
end 

@user.save我想找回剛剛創建的帳戶ID,並保存在用戶數據庫表該值。我需要這樣做,因爲我將使用account_id作爲用戶類的外鍵,但我不知道它是否可行。如果是這樣,我該怎麼做?


在我的用戶模型,我也tryed如下:

before_create :initialize_user 

def initialize_user 
    user_account = Account.create 
    self.account_id = user_account.id 
end 

,但它不工作。


UPDATE

我tryed這

class User < ActiveRecord::Base 
    belongs_to :account, 
    :class_name => "Account", 
    :foreign_key => "users_account_id" 
end 

class Account < ActiveRecord::Base 
    has_one :user, 
    :class_name => "User", 
    :foreign_key => "users_account_id" 
end 

,並保存新的帳戶。無論如何,在用戶數據庫表中,列users_account_idnull,因此foreign_key值不會自動保存。

+0

'@ user.account.id'不起作用? – mway 2011-03-18 19:16:00

+0

使用_...通常意味着該模型將具有主鍵。任何屬於belongs_to的模型通常都會包含外鍵。你有沒有在賬戶模式中做'belongs_to'來維持這種關係? – 2011-03-18 19:17:52

+0

@mway我認爲我必須主要在控制器中使用它。也許在模型中我必須使用回調,但如果另一個人創建自己的用戶,那麼這個人可能會得到相同的account.id值?(!)無論如何,我想找到一些「直接的方式」。 – user502052 2011-03-18 19:19:53

回答

0

方法是錯誤的。當你有一個「has_one」關係時,他們的外鍵在關聯模型中。所以在你的情況下,它會考慮在內。如果它接受帳戶的嵌套屬性。如果你正在寫,那應該被默認照顧。

看看http://railscasts.com/episodes/196-nested-model-form-part-1,另一部分爲好,見表格如何嵌套工作

+0

我已經看到了railscast,但我想在用戶模型中有關鍵字。所以我應該將關聯從'has_one'更改爲'belogns_to'? – user502052 2011-03-18 19:23:37

+0

@ user502052你確定你不想要一個擁有has_many用戶的帳戶模型,以及一個屬於某個帳戶的用戶模型嗎? – 2011-03-18 19:28:03

+0

是的,將其更改爲belongs_to,並且當您接受嵌套屬性時,它應該只創建帳戶本身。你不必單獨創建它。 – 2011-03-18 19:29:43

0
def initialize_user 
    user_account = Account.create 
    self.account_id = user_account.id 
end 

應該

def initialize_user 
    self.account.create 
end 

當創建新帳號的實例,它將使用有關當前用戶的信息自動。你的方法可以工作,但你需要添加一個額外的「保存」電話。

+0

我還需要傳遞從表單填寫的帳戶參數......所以,如果可能,我不這樣做。 – user502052 2011-03-18 21:00:37

+0

你可以爲這個'initialize_user'工具函數添加一個額外的參數,或者從你的控制器調用類似'@current_user.account.create params [:account_stuff]'的東西。 – nessur 2011-03-28 20:05:14

相關問題