我在用户模型与播放器模型之间建立了has_one
关联。我看到自己在控制器和视图中多次执行current_user.player,而且我觉得每次执行此操作时我都会过多地使用DB。还有一个current_player方法会很好。
我如何以及在何处定义这样的方法,以便从控制器和视图中访问current_player
?
答案 0 :(得分:0)
每次点击页面时,(正确)重新加载至少一次,但您可以通过memoizing结果帮助防止跟踪加载:
class User
has_one :player
def current_player
@current_player ||= player
end
end
作为替代方案,您可以包含播放器模型 在默认范围内,因此只要加载用户模型,它就会加载:
class User
has_one :player
default_scope includes(:player)
end
不幸的是,每当我尝试过这种情况时,我倾向于快速发现我实际上并不希望它每隔时间自动加载另一个表,并切换回之前只加载的方法第一次使用的第二个表。简单地将对象记忆成ivar非常灵活。