1

使用 Rails 3.2。我有以下代码:

# photo.rb
class Photo < ActiveRecord::Base
  before_create :associate_current_user
  after_save :increase_user_photos_count
  after_destroy :decrease_user_photos_count

  private

  def associate_current_user
    current_user = UserSession.find.user
    self.user_id = current_user.id
  end

  def increase_user_photos_count
    current_user = UserSession.find.user
    User.increment_counter(:photos_count, current_user.id)
  end

  def decrease_user_photos_count
    current_user = UserSession.find.user
    User.decrement_counter(:photos_count, current_user.id)
  end
end

在创建新记录之前,它会搜索current_user. 如果一次只有 1 条新记录,这没关系。但是如果要创建 100 条记录,它会搜索相同的current_user100 次。肯定有性能问题。

  1. 我不希望它在每次创建记录/更新照片计数等时一直查找当前用户。
  2. 重构后,这是否会影响其他也在使用他们的帐户上传照片的用户?

注意:由于某些原因,我不能使用counter_cacheandphotos_controller.rb因为我遵循这个例子:http ://www.tkalin.com/blog_posts/multiple-file-upload-with-rails-3-2-paperclip-html5-和-没有-javascript

谢谢。

4

1 回答 1

3

用这个

def current_user
  @current_user ||= UserSession.find.user
end

这将缓存实例变量中的值,@current_user除非它是 nil (第一次在请求中),在这种情况下它将设置它。

于 2012-11-29T15:09:06.623 回答