2012-07-06 53 views
1

的Rails 3.2.5當CURRENT_USER是零,設計2.1軌,設計:覆蓋RegistrationsController

用設計來驗證用戶,並創建一個新用戶時,我有一個問題。

用戶屬於哪個創建在用戶模型使用before_save濾波器的帳戶。這工作正常,並有一段時間。

新的代碼需要用戶的賬戶信息的創建方法的一部分。我依賴於請求中傳遞的參數,所以這不是模型邏輯的一個好選擇。我已經覆蓋了設計:: RegistrationsController#創建方法:

class DeviseCustom::RegistrationsController < Devise::RegistrationsController 
    def create 
    super         # Call Devise's create 
    account = current_user.account   # FAIL! (current_user is nil) 
    account.partner_id = current_partner 
    account.save! 
    end 
end 

current_usernil這將導致代碼失敗。即使在出現故障的情況下,我可以看到用戶和賬戶記錄被在數據庫中保存 - 日誌顯示commit,並記錄self.inspect顯示所有我的上下文(參數,可以和更多)是所有仍當下。

我本來以爲會current_user在這種情況下是可用 - 什麼是適當的方式來獲得在我剛剛創建的用戶?

感謝

回答

1

前言:我從來沒有使用色器件。

我的猜測是current_user對象還沒有被創建,要麼是因爲在調用鏈中沒有原因(沒有用戶憑據),或者因爲它還沒有在#after_save中發生如果存在?)。

設計使用#resource方法來抓住你想保存當前的實例變量(或因此它看起來):

https://github.com/plataformatec/devise/blob/master/app/controllers/devise_controller.rb#L16

我會做的是將其更改爲:

class DeviseCustom::RegistrationsController < Devise::RegistrationsController 
    def create 
     super         # Call Devise's create 
     account = resource.account   # FAIL! (current_user is nil) 
     account.partner_id = resource.current_partner 
     account.save! 
    end 
end 

你可能會想添加到您的模型:

attr_accessor :current_partner 

這將允許您從資源(模型)訪問current_partner。

希望有幫助!

+0

是的,'資源'是神奇的。謝謝!我應該只是看着代碼,而不是從記錄器的:-)'current_partner'位可怕self.inspect'輸出'是ApplicationController的方法,我寫做擡頭看即將進行相關的合作伙伴記錄 - 這與Devise無關。我欠你一個人情! – 2012-07-07 00:51:08

+0

不用擔心,夥計!我很高興它工作:) – tehprofessor 2012-07-07 02:17:58

1

我能夠通過重寫時,包括他們在我的控制器 使用設計的輔助方法。

include Devise::Controllers::Helpers

+0

這是正確的答案,應該標記爲這樣。 – 2015-05-29 15:55:25