调用布局上最近的帖子



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

最好的方法是什么?

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

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

我一直在摆弄部分,但它们确实需要一个带有@recent_posts的实例变量。

您可能关注两部分:1(性能,2(需要付出的努力。 两者都很容易解决。

正如 Andrei S 在他的回答中指出的那样,通过使用调用从 ApplicationController 类执行工作的方法的before_filter,可以缓解便利/工作量问题。

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

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将仅在需要时执行其工作。

我相信一些更有说服力的红宝石学家有更好的方法来做到这一点,但这是一个想法。

您可以将帖子所在的部分放在部分,并在应用程序的总体布局中使用它。

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

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

(

最新更新