2013-10-05 26 views
3

我讓我的用戶有多個配置文件(用戶有很多的配置文件),其中一個是默認的。在我的用戶表中我有一個default_profile_id。創建類似設計的CURRENT_USER的方法使用無處不在

如何創建一個「DEFAULT_PROFILE的」像設計的CURRENT_USER,我可以到處使用?

我應該在哪裏,就把這行?

default_profile = Profile.find(current_user.default_profile_id) 

回答

8

設計的CURRENT_USER方法是這樣的:

def current_#{mapping} 
    @current_#{mapping} ||= warden.authenticate(:scope => :#{mapping}) 
end 

正如你所看到的,@current_#{mapping}被memoized。在你的情況,你想使用這樣的事:

def default_profile 
    @default_profile ||= Profile.find(current_user.default_profile_id) 
end 

到處使用它關於,我會假設你想同時在控制器和你的意見來使用它。如果是這樣的話,你將宣佈它在你的ApplicationController像這樣:

class ApplicationController < ActionController::Base 

    helper_method :default_profile 

    def default_profile 
    @default_profile ||= Profile.find(current_user.default_profile_id) 
    end 
end 

helper_method將讓你在你的意見訪問此memoized DEFAULT_PROFILE。在ApplicationController中使用此方法可讓您從其他控制器調用它。

3

您可以通過以下方法定義裏面裏面放應用控制器驗證碼:

class ApplicationController < ActionController::Base 
    ... 
    helper_method :default_profile 

    def default_profile 
    Profile.find(current_user.default_profile_id) 
    rescue 
    nil 
    end 
    ... 
end 

而且,可以像在你的應用CURRENT_USER訪問它。如果你調用default_profile,它會給你配置文件記錄(如果可用),否則爲零。

+0

其實我提出,在用戶模式。 – Dogweather

+1

'rescue nil'是一個不好的模式。如果找不到,'find_by_id(...)'也返回'nil'。 – spickermann

+0

我得到NameError:未定義的本地變量或方法'default_persona'爲主:對象 –

1

我會給用戶添加一個方法profile或定義has_one(首選)。比它只是current_user.profile如果你想默認的配置文件:

has_many :profiles 
has_one :profile # aka the default profile 

我不會實現快捷的方法,但是你想:

class ApplicationController < ActionController::Base 

    def default_profile 
    current_user.profile 
    end 
    helper_method :default_profile 

end 
相關問題