在布局上调用最近的帖子

时间:2012-03-15 18:48:04

标签: ruby-on-rails-3

想象一下,我有一个博客,我希望在任何给定时间显示我最近的3篇帖子的页脚或侧边栏。

这样做的最佳方式是什么?

我可以在每个控制器中调用@recent_posts让它们为布局做好准备,但这似乎不是最好的方式... ...

@recent_posts = Posts.all(:limit => 3)

我一直在摆弄偏见,但他们确实需要一个带有@recent_posts的实例变量。

2 个答案:

答案 0 :(得分:2)

您可能会关注两个部分:1)表现,2)所需的努力。两者都很容易解决。

正如Andrei S在他的回答中所指出的那样,通过使用before_filter调用从ApplicationController类开始工作的方法来减轻便利/努力问题。

性能问题只是稍微多一些工作。而不是方法

def most_recent_posts
  Posts.order(created_at DESC).limit(3)
end

而不是这样做

def most_recent_posts
  @most_recent_posts ||= Posts.order(created_at DESC).limit(3)
end

检查实例变量是否为nil;如果为nil,则执行查询并将结果分配给实例变量。

您还需要一种方法来更新添加新帖子时的更新,这可能类似于

def clear_most_recent_posts!
  @most_recent_posts = nil
end

然后从修改表的方法中调用clear_most_recent_posts!。只有在需要时,before_filter才能完成工作。

我相信一些更有说服力的rubyist有更好的方法可以做到这一点,但这是一个想法。

答案 1 :(得分:1)

您可以将部分位置放在部分位置,并在应用的常规布局中使用它。

要在每个控制器中加载它们,您可以在设置实例变量的before_filter中执行ApplicationController,这将在您在布局中呈现的部分中可用

这样你只需要做一次,它就可以在任何地方完成(当然你可以设置过滤器的条件和布局,以便在需要时加载它们,如果你真的不需要它们页)