gpt4 book ai didi

ruby-on-rails - 如何记住 Rails 中的类方法?

转载 作者:行者123 更新时间:2023-12-03 23:28:36 25 4
gpt4 key购买 nike

我有一个带有类方法的模型,该方法的计算量很大,我每次请求都会调用多次。

理想情况下,我想在单个请求期间缓存结果。

在这种情况下,rails 的最佳实践是什么?

例子:

class MyClass < ActiveRecord::Base
def self.heavy_method; ... ; end
end

然后在 helper
def helper
MyClass.heavy_method
end

这个助手用在很多 View 中

最佳答案

这是一个非常通用的解决方案,可能对您有用。

class Klass
def self.memoized_expensive_method
@memoized_expensive_method_result ||= expensive_method
end

def self.expensive_method
# ...
end
end

然后,如果您想确保在每个请求上重新执行您的代码,您可以在 Controller 中使用过滤器。
class Klass
def self.reset_expensive_method_cache!
@memoized_expensive_method_result = nil
end
end

class ApplicationController
before_filter :reset_klass_expensive_method_cache

def reset_klass_expensive_method_cache
Klass.reset_expensive_method_cache!
end
end

请注意,将内容存储在类变量中可能会导致线程安全问题,因为缓存的结果将在线程之间共享。

如果这对您的应用程序来说可能是一个问题,您可能希望将数据存储在线程中而不是使用类变量。

关于ruby-on-rails - 如何记住 Rails 中的类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16132477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com