0

UserモデルとPlayerモデルの間にhas_one関連付けがあります。コントローラーとビューで current_user.player を何度も実行していることに気づき、そのたびに DB にアクセスしすぎているように感じます。また、current_player メソッドがあると便利です。

current_playerコントローラーとビューの両方からアクセスできるように、そのようなメソッドをどこでどのように定義すればよいでしょうか?

4

1 に答える 1

0

ページにアクセスするたびに少なくとも 1 回は (適切に) リロードされますが、結果をメモすることで次のロードを防ぐことができます。

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

別の方法として、プレーヤー モデルをデフォルト スコープに含めることもできます。これにより、User モデルがロードされるたびにロードされます。

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

残念ながら、試してみると、実際には毎回他のテーブルを自動ロードしたくないことがすぐにわかり、最初の使用時に2番目のテーブルからのみロードする以前の方法に戻ります。オブジェクトを単純に ivar にメモする方が、はるかに柔軟です。

于 2012-07-03T04:20:27.203 に答える