我有一个方法用于在每个页面上呈现新闻文章。如果您不在护理主页上,那么它不会向该家庭呈现特定新闻。处理每个页面请求都非常繁重。我想知道是否有人能想出一个很好的缓存方法。
def articles_to_show
@articles = @care_home ? @care_home.news_items.latest.translated.limit(4).includes(:images) : Refinery::News::Item.latest.hidden_from_main.translated.limit(4).includes(:images)
end
以下是视图模板 - http://pastebin.com/BAmgSZia
我尝试过片段缓存,但后来我偶尔意识到如果它过期并且第一个请求是护理院的请求,则新闻文章将被错误地填充。
答案 0 :(得分:0)
你已经拥有丑陋的代码,所以让这段代码变得更加模糊不是很糟糕......
@articles = lambda { YOUR_HEAVY_CODE }
然后在你看来你是:
- cache do
- @articles = @articles.call
= #rest of the partial
值得一提的是,如果您不能使用任何嵌入式和建议的缓存方式,那么您的设计可能有问题。
#articles_to_show
这是REST方法的一个不好的例子,你可以改为:
class Articles::CollectionController
方法 show
不要使用ternarny运算符,可能根本就是混淆了。 ?:
语法仅适用于非常简单的语句。
不要将太多的东西放在控制器上,尝试通过将它们合并到另一种方法来委托你的方法,范围 - 它会更清洁