2012-11-28 18 views
0

使用Rails 3.2。我有以下代碼:模型中的緩存對象用於Rails中的多個操作

# photo.rb 
class Photo < ActiveRecord::Base 
    after_create :associate_current_user 

    private 

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

在創建新記錄之前,它會搜索current_user。如果它一次只有1個新記錄,這是可以的。但是如果有100個記錄要創建,它會搜索100次相同的current_user。肯定有性能問題。

有沒有一種方法可以緩存對象的類似操作,或任何建議?

謝謝。

+0

你可以張貼創建多張照片的代碼?如果它在控制器中,那麼最好將用戶加載一次,然後將其傳遞給每個創建語句。從模型中的會話加載用戶有點違反了MVC模式。 – Thilo

+0

由於某些原因,我沒有使用控制器來創建照片。我使用這種方法:http://www.tkalin.com/blog_posts/multiple-file-upload-with-rails-3-2-paperclip-html5-and-no-javascript我的照片控制器是完全空的。 – Victor

回答

0

你可以做記憶化的東西如下

class Photo < ActiveRecord::Base 
    extend ActiveSupport::Memoizable 
    after_create :associate_current_user 

    private 

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

我可以刪除'self.user_id = current_user.id'並緩存'associate_current_user',然後在同一模型中調用它以防止它再次搜索用戶對象?如果多個用戶上傳照片會發生什麼?緩存對象何時被刪除?謝謝。 – Victor

相關問題