在我的 Rails 4 应用程序中,用户
可以使用跳过按钮单击 edit 他的 invoices
View 。
我的问题是每张发票都包含相同的昂贵选择框...
def self.options
names = []
names << [ "Please select...", nil ]
order(:last_name).includes(:company).with_projects.map do |person|
names << [ person.name, person.id, :'data-address' => person.invoice_address, :'data-email' => person.email ]
end
names
end
...尽管所有发票几乎都相同,但它会从头开始计算每张发票。
有没有办法将这些选项存储在某个地方,以便在跳过各种发票时可以更快地调用它们?
感谢您的帮助。
最佳答案
您可以使用 Rails 缓存来执行此操作
def self.options
Rails.cache.fetch('some_key', expires_in: 10.minutes) do
['Please select...', nil ] +
order(:last_name).includes(:company).with_projects.map do |person|
[ person.name, person.id, :'data-address' => person.invoice_address, :'data-email' => person.email ]
end
end
end
您可以将 'some_key'
更改为唯一的内容,并将超时更改为其他内容,当缓存过期时,rails 将在下一次请求时重新生成它,或者如果您愿意,可以创建一个任务定期生成此缓存。
基本上这个 block 寻找一个名为 'some_key'
的缓存并返回它,但是如果找不到缓存键或者它已经过期它会重新计算其中的代码,缓存它然后返回
此方法在 this guide 中有解释。如果您有兴趣,我已经写了一篇关于不同选项的帖子 over here
关于ruby-on-rails - 如何在 Rails 中更快地实现昂贵的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30012067/