Twitter gem 仅在 1 个控制器中运行。 Returns 否则为零

Twitter gem works just in 1 controller. Returns nil otherwise

我正在使用 Twitter gem 检索推文并将它们显示在平台的不同位置。 我正在使用初始化程序建立连接:

$twitter = Twitter::REST::Client.new(TWITTER_CREDENTIALS)

TWITTER_CREDENTIALS在常量文件中定义。

在我的页面控制器中,我在主页上发送一些推文,如下所示:

def home
  @description = "Hello World"
  @tweets = $twitter.user_timeline(current_region.twitter_handle, count: 4)
  @companies = Company.first(2)
end

它就像一个魅力。即使我用任何推特句柄替换 current_region.twitter_handle,它也会在主页上呈现推文。

现在问题开始了。在我的公司控制器中,我试图做同样的事情,但是 @tweets == nil 所以我的视图甚至无法呈现。这是我来自第二个控制器的代码。它完全相同,只是用户名不同。

def show
  @company = Company.find_by_id(params[:id])
  @tweets = $twitter.user_timeline(@company.twitter, count: 4)
end

我似乎无法弄清楚为什么它在从一个控制器调用时有效而从另一个控制器调用时无效。欢迎任何关于为什么会发生这种情况的想法。出于测试目的,在我的 show 视图中,我正在做

<div><%= @tweets.inspect %></div>
<div><%= @company.twitter %></div>

那些打印:

nil
"example handle"

编辑:

我打开了 rails 控制台,如果我 运行 show 操作的行,@tweets 不再是零。它 returns 正确的对象。也许这有助于找出问题。

我仍然不明白为什么,但唯一能让它工作的方法是在实际视图中加载 user_timeline。所以在我看来,我把它放在首位 tweets = $twitter.user_timeline(@company.twitter, count: 4) 并且它工作正常。

如果有人知道为什么它以这种方式而不是另一种方式工作,请继续告诉我们。我很想知道。