ruby-on-rails - 页面缓存,自动过期/清理器的最佳实践

标签 ruby-on-rails caching

到目前为止,我从未真正深入研究过 Rails 提供的令人惊叹的缓存技术。我真正无法理解的一件事是如何解决这个特定问题。

鉴于我有一个包含许多帖子的博客模型:

class Blog < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
  named_scope :published, :conditions => ["published_at < ?", Time.now]
end

BlogsController 中的显示操作显示已发布的帖子列表:

// BlogsController

def show
 @blog = Blog.find(params[:id)
end

// View

<% @blog.posts.published.each do |p| %>
 <h2><%=h p.title %></h2>
 <%= simple_format(p.content) %>
<% end %>

当对published_at属性进行任何更改时,缓存必须过期,但在将来放置published_at并达到该时间时,缓存也需要过期。

你们能给我一些如何最好地解决这个问题的想法和建议吗?计划任务还是我疯了?

最佳答案

您显示的代码不使用任何 Rails 的缓存功能。但是,您的 :published 命名范围将在首次执行该代码时使用(并且在生产中,通过类缓存记住)Time.now

我怀疑你想要这个:

named_scope :published, lambda { { :conditions => ["published_at < ?", Time.now] } }

lambda 确保 Rails 每次都会重新评估您的条件。

关于ruby-on-rails - 页面缓存,自动过期/清理器的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1902099/

相关文章:

ruby-on-rails - 对于 Ruby 1.9.3 和 Rails 3.2,Puma 是否比 Unicorn 更好?

javascript - 使用缓存提高脚本的速度

django - 在 Django 中缓存半动态 View

Javascript iframe 缓存问题

c++ - 通过良好的设计减少缓存未命中

google-chrome - Chrome 不缓存预检

ruby-on-rails - 使用 docker-compose 部署的 Rails, Assets 不工作

ruby-on-rails - 禁用 rake 任务

ruby-on-rails - 回调是否停止 rails 中的操作

ruby-on-rails - 使用 Redirect_To 时,Rails 3 通知不起作用