想象一下,我有一个博客,我希望在任何给定时间显示我最近的3篇帖子的页脚或侧边栏。
这样做的最佳方式是什么?
我可以在每个控制器中调用@recent_posts
让它们为布局做好准备,但这似乎不是最好的方式... ...
@recent_posts = Posts.all(:limit => 3)
我一直在摆弄偏见,但他们确实需要一个带有@recent_posts
的实例变量。
答案 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
,这将在您在布局中呈现的部分中可用
这样你只需要做一次,它就可以在任何地方完成(当然你可以设置过滤器的条件和布局,以便在需要时加载它们,如果你真的不需要它们页)