Rails: установите приватное значение, чтобы оно вызывало базу данных только один раз - PullRequest
1 голос
/ 13 июля 2011

У меня есть следующий метод, чтобы проверить, есть ли у пользователя права администратора.

  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

Проблема возникает, когда я хочу вызвать это несколько раз на странице.Как я могу сделать это так, чтобы я установил личное значение и сделал вызов базы данных только в первый раз?

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Вы можете просто сохранить результат в хэше, и если вы снова посмотрите на того же пользователя, верните результат из хэша.Как это:

def has_admin_access?(user)
  @admin_hash ||= {}
  if (!@admin_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 голосов
/ 13 июля 2011

Попробуйте:

extend ActiveSupport::Memoizable
memoize :has_admin_access?

больше информации

...