2012-09-20 36 views
0

當然,我的應用程序是使用Devise進行認證設計的。我擁有它,所以當第一個用戶註冊時,帳戶在帳戶表中創建並且account_id傳遞給用戶表。我還設置了它,以便每次創建一個新帳戶時,該用戶都被標記爲管理員。最後,我讓它在管理員可以創建新用戶的地方工作。在註冊期間將帳戶ID傳遞給新用戶

我的問題是,在創建新用戶時,我需要爲這些用戶分配與admin相同的account_id以將用戶綁定在一起。如果我在表單上添加account_id字段並讓管理員手動輸入,我可以這樣做。我想要的是這在後臺自動完成。

我嘗試了許多品種沒有成功。這就是我把下面的user.rb

before_save :add_account_id_from_parent  

    def add_account_id_from_parent  
    return true unless self.users.present?  
    self.users.update_attribute(:account_id, 1)  
    end 

我用數字「1」只是爲了看看我是否能得到任何的自動化,並放置在該領域的不成功的嘗試之一。

就像我說的手動一切正常,但我希望它,所以acocunt_id是基於管理員account_id註冊時自動添加。

回答

0

我有點困惑,爲什麼你打電話給self.users。如果我理解正確,在創建新用戶(作爲測試)後,您想要將account_id指定爲1。你可以是這樣做的:

before_save :add_account_id_from_parent 

def add_account_id_from_parent 
    self.account_id = 1 
end 

你並不需要真正更新的記錄,因爲這是之前分配保存,並保存將寫入新值分貝。

再次,我可能會錯過一些東西,如果是這樣請澄清。

UPDATE

如果要驗證該account存在,您需要更改回調到before_validation,而不是before_save,就像這樣:

before_validation :add_account_id_from_parent 
+0

我不相信你錯過了什麼,我只是寫錯了。當我嘗試你的代碼 - 它說帳戶不能爲空,所以它不會保存用戶。另外,在你的上面的代碼中它增加了一個固定的數字。我需要做的不是添加1,而是查看創建帳戶的管理員的account_id,並將該用戶名輸入到新用戶account_id中。我是正確的,我將以上添加到user.rb – user1648020

+0

問題是,你有一個驗證檢查「帳戶」存在,這是失敗的,所以它永遠不會到保存步驟。將'before_save'切換到'before_validation'並且應該可以工作。 –

+0

回覆:您的第二個問題,我沒有足夠的信息來編寫該代碼。當前用戶的變量名稱是什麼?通常這將是'current_user'。假設是這樣,你可以用'current_user.account_id'代替'1',即:'self.account_id = current_user.account_id'。 –