2012-12-01 59 views
0

使用Rails 3.2。假設我有10張新照片需要上傳,我需要將我的current_user.id與每個新記錄相關聯。由於某些原因,photos_controller.rb是空白的,因爲它與另一個型號Shop嵌套。這裏是我的代碼:記憶當前用戶對象before_create

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_user一次,然後把它從緩存中(一個記憶化技術),但因爲我使用的是before_create,所以current_user被查詢了10次,而不是從緩存中獲取它。

我能做些什麼來緩存@current_user_id

謝謝。

+0

**這是一個模型**,'@ current_user_id'是一個**實例變量**。每個'Photo'的新實例都獲得它自己的'@ current_user_id'。十個實例,十個變量,十個查詢。 – Substantial

回答

0

答案很簡單:您應該而不是做任何與您的模型中的會話相關的任何事情,它會打破MVC模式。

取而代之,在您的控制器中執行此操作,因此您只需要獲得current_user.id一次,然後將其分配給您的記錄。

0

這種邏輯屬於控制器。將您的current_user_id方法移至PhotosController(如果您打算在其他控制器中也使用此邏輯),則將方法移至ApplicationController。這樣,每次上傳操作只會爲其分配@current_user一次。

一定要保密。