0

Rails 3.2 を使用しています。current_user.idアップロードする新しい写真が 10 枚あるとします。新しい各レコードに自分の写真を関連付ける必要があります。何らかの理由で、photos_controller.rbは別のモデルとネストされているため、空白になっていShopます。これが私のコードです:

class Photo < ActiveRecord::Base
  belongs_to :attachable, :polymorphic => true, :counter_cache => true
  belongs_to :user, :counter_cache => true

  before_create :current_user_id
  before_create :associate_current_user

  def current_user_id
    @current_user_id ||= UserSession.find.user.id
  end

  private

  def associate_current_user
    self.user_id = @current_user_id
  end
end 

作成する新しいレコードが 10 個ある場合、モデルで をcurrent_user1 回検索してキャッシュから取得する (メモ化手法) ことは明らかですが、 を使用しているため、before_createcurrent_user取得する代わりに 10 回クエリを実行します。キャッシュから。

をキャッシュするにはどうすればよい@current_user_idですか?

ありがとう。

4

2 に答える 2

0

答えは簡単です。モデル内のセッションに関連することは何もしないでください。MVCパターンが壊れます。

代わりに、コントローラーでこれを行うと、current_user.id1回だけ取得して、レコードに割り当てる必要があります。

于 2012-12-01T14:04:55.177 に答える
0

この種のロジックはコントローラーに属します。current_user_idメソッドをPhotosController(または、ApplicationControllerこのロジックを他のコントローラーでも使用する予定がある場合は)に移動します。そうすれ@current_userば、アップロード アクションごとに 1 回だけ割り当てられます。

こちらも必ず非公開にしてください。

于 2012-12-01T15:28:25.180 に答える