使用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_user
100次。肯定存在性能问题。
注意:由于某些原因,我无法使用counter_cache
和photos_controller.rb
因为我遵循此示例:http://www.tkalin.com/blog_posts/multiple-file-upload-with-rails-3-2-paperclip-html5-and-no-javascript
感谢。
答案 0 :(得分:3)
使用此
def current_user
@current_user ||= UserSession.find.user
end
这将缓存实例变量@current_user
中的值,除非它是nil(在请求中第一次),在这种情况下它将设置它。