0

我在用户模型和播放器模型之间有has_one关联。我看到自己在控制器和视图中多次执行 current_user.player,并且我觉得每次执行此操作时都对数据库造成了太多影响。还有一个 current_player 方法会很好。

我将如何以及在哪里定义这样的方法,以便我可以current_player从控制器和视图访问?

4

1 回答 1

0

每次您点击页面时,它(正确地)至少会重新加载一次,但您可以通过记忆结果来帮助防止以下加载:

class User
  has_one :player
  def current_player
    @current_player ||= player
  end
end

作为替代方案,您可以将播放器模型包含在默认范围内,以便在加载用户模型时加载它:

class User
  has_one :player
  default_scope includes(:player)
end

不幸的是,每当我尝试过时,我往往会很快发现我实际上并不希望它每次都自动加载另一个表,并切换回以前的方法,该方法只在第一次使用时从第二个表加载。简单地将对象记忆到 ivar 中要灵活得多。

于 2012-07-03T04:20:27.203 回答