我允许我的用户拥有多个配置文件(用户有很多配置文件),其中一个是默认配置。在我的用户表中,我有一个 default_profile_id。
如何创建像 Devise 的 current_user 这样我可以在任何地方使用的“default_profile”?
我应该把这条线放在哪里?
default_profile = Profile.find(current_user.default_profile_id)
我允许我的用户拥有多个配置文件(用户有很多配置文件),其中一个是默认配置。在我的用户表中,我有一个 default_profile_id。
如何创建像 Devise 的 current_user 这样我可以在任何地方使用的“default_profile”?
我应该把这条线放在哪里?
default_profile = Profile.find(current_user.default_profile_id)
Devise 的 current_user 方法如下所示:
def current_#{mapping}
@current_#{mapping} ||= warden.authenticate(:scope => :#{mapping})
end
如您所见,@current_#{mapping}
正在记忆中。在你的情况下,你想使用这样的东西:
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
将允许您在视图中访问这个记忆的 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