保存has_one关联的结果以避免在Rails中获取DB?

时间:2012-07-02 23:31:12

标签: ruby-on-rails-3 optimization model has-one

我在用户模型与播放器模型之间建立了has_one关联。我看到自己在控制器和视图中多次执行current_user.player,而且我觉得每次执行此操作时我都会过多地使用DB。还有一个current_player方法会很好。

我如何以及在何处定义这样的方法,以便从控制器和视图中访问current_player

1 个答案:

答案 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非常灵活。