我讓我的用戶有多個配置文件(用戶有很多的配置文件),其中一個是默認的。在我的用戶表中我有一個default_profile_id。創建類似設計的CURRENT_USER的方法使用無處不在
如何創建一個「DEFAULT_PROFILE的」像設計的CURRENT_USER,我可以到處使用?
我應該在哪裏,就把這行?
default_profile = Profile.find(current_user.default_profile_id)
我讓我的用戶有多個配置文件(用戶有很多的配置文件),其中一個是默認的。在我的用戶表中我有一個default_profile_id。創建類似設計的CURRENT_USER的方法使用無處不在
如何創建一個「DEFAULT_PROFILE的」像設計的CURRENT_USER,我可以到處使用?
我應該在哪裏,就把這行?
default_profile = Profile.find(current_user.default_profile_id)
設計的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
中使用此方法可讓您從其他控制器調用它。
您可以通過以下方法定義裏面裏面放應用控制器驗證碼:
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,它會給你配置文件記錄(如果可用),否則爲零。
我會給用戶添加一個方法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
其實我提出,在用戶模式。 – Dogweather
'rescue nil'是一個不好的模式。如果找不到,'find_by_id(...)'也返回'nil'。 – spickermann
我得到NameError:未定義的本地變量或方法'default_persona'爲主:對象 –