Rails:在所有控制器中放置所需的变量的位置

时间:2011-07-25 08:41:48

标签: ruby-on-rails ruby-on-rails-3

我有一个调用

的部分模板
feed = Feedzirra::Feed.fetch_and_parse("http://my.rss.feed")
@entries = feed.entries

在我网站的大约80%的页面中调用了这个部分 - 我只是想知道最佳实践:在哪里存储这种类型的变量。任何建议表示赞赏。

3 个答案:

答案 0 :(得分:4)

我想使用过滤器 - 无论在之前还是之后适用。

答案 1 :(得分:2)

您应该将它放在application_controller的before_filter中。这样,它将为每个操作分配给每个控制器。

答案 2 :(得分:0)

此代码应放在控制器中。最简单的方法就是这样做

class ApplicationController

  def fetch_feed_entries
    feed = Feedzirra::Feed.fetch_and_parse("http://my.rss.feed")
    @entries = feed.entries
  end

end

然后,在任何必须发生这种情况的控制器内,您可以编写如下内容:

class PostsController

  before_filter :fetch_feed_entries

end

现在,此代码仍会为每个请求获取Feed。如果这是你想要的,那很好。但您也可以将Feed保存在会话中,因此每次会话只会提取一次Feed。我不确定这对你是否有意义。

然后你会写一些像:

 def fetch_feed_entries
   session[:feed_entries] ||= Feedzirra::Feed.fetch_and_parse("http://my.rss.feed").entries
   @entries = session[:feed_entries]
 end

希望这有帮助。