Twitter gem仅适用于1个控制器。否则返回nil

时间:2015-04-06 16:20:26

标签: ruby-on-rails ruby ruby-on-rails-4 twitter

我使用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

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

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

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

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

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

那些印刷品:

nil
"example handle"

编辑:

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

1 个答案:

答案 0 :(得分:0)

我仍然不明白为什么,但我能使其发挥作用的唯一方法是在实际视图中加载user_timeline。所以在我看来,我把它放在最顶层tweets = $twitter.user_timeline(@company.twitter, count: 4)上,它运行正常。

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