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