2011-07-13 55 views
1

我有以下方法來檢查用戶是否具有管理員訪問權限。Rails:設置一個私有值,所以它只能調用數據庫一次

def has_admin_access?(user) 
    user.present? && gym_users.where(:role_id => [3, 4]).where(['user_id = ? AND date_ended IS NULL', user.id]).any? 
    end 

問題出現在我想在頁面上多次調用該選項。我該如何做到這一點,以便我設置一個私有值並且只在第一次進行數據庫調用?

+1

在生產中,Rails會只有一次執行數據庫查詢。你不需要做任何特別的事情來獲得這個。 –

回答

1

您只能將結果存儲在散列中,並且如果再次查找同一用戶,則會從散列中返回結果。就像這樣:

def has_admin_access?(user) 
    @admin_hash ||= {} 
    if ([email protected]_hash.include?(user)) 
    @admin_hash[user] = user.present? && gym_users.where(:role_id => [3, 4]).where(['user_id = ? AND date_ended IS NULL', user.id]).any? 
    end 
    @admin_hash[user] 
end 
+0

你有@admin以及@admin_hash,@admin的價值是什麼? – Jhorra

+0

對不起,瀏覽器中的編碼錯誤。它應該是@admin_hash。 – jergason

0

嘗試:

extend ActiveSupport::Memoizable 
memoize :has_admin_access? 

more information

相關問題