Rails:设置一个私有值,这样它只调用数据库一次

发布于 2024-11-20 00:37:26 字数 286 浏览 9 评论 0原文

我有以下方法来检查用户是否具有管理员访问权限。

  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

当我想在一个页面上多次调用它时,问题就出现了。我该如何做到这一点,以便设置一个私有值并且仅在第一次进行数据库调用?

I have the following method to check if a user has admin access.

  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

The problem comes when I want to call this multiple times on a page. How can I do this so that I set a private value and only make the database call the first time?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

人间不值得 2024-11-27 00:37:27

您可以将结果存储在哈希中,如果您再次查找同一用户,则从哈希中返回结果。像这样:

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

You can just store the result in a hash, and if you look up the same user again return the result from the hash. Like this:

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
記憶穿過時間隧道 2024-11-27 00:37:27

尝试:

extend ActiveSupport::Memoizable
memoize :has_admin_access?

更多信息

Try:

extend ActiveSupport::Memoizable
memoize :has_admin_access?

more information

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文