2011-07-13 2 views
1

ユーザーに管理者権限があるかどうかを確認する次の方法があります。Rails:データベースを1回だけ呼び出すようにプライベート値を設定する

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_hashと同様に@adminを持っていますが、@adminの価値は何ですか? – Jhorra

+0

申し訳ありませんが、ブラウザの入力ミスです。 @admin_hashにする必要があります。 – jergason

0

は試してみてください:このような生産で

extend ActiveSupport::Memoizable 
memoize :has_admin_access? 

more information

関連する問題