2015-04-06 27 views
0

我正在使用Twitter宝石检索推文并在平台的不同位置显示它们。 我使用的初始化进行连接:Twitter的宝石只在1控制器工作。否则返回零

$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" 

编辑:

我打开轨道控制台,如果我运行线show行动, @tweets不再是零。它返回适当的对象。也许这有助于找出问题。

+0

您是否测试过'Company.find_by_id(params [:id])'是否真的返回?顺便说一句:'Company.find(params [:id]'正在做同样的工作。 – Klaus

+0

是的,它确实返回了公司对象,我在视图中使用了100次以上,所以不应该成为问题 – DonKoko

+0

我只搜索了一下gem的源代码,但找不到twitter方法,只是为了解释:twitter_handle(home action)和twitter(show action)有什么区别? – Klaus

回答

0

我仍然不明白为什么,但我可以使它工作的唯一方法是在实际视图中加载user_timeline。所以在我看来,我有这个顶部tweets = $twitter.user_timeline(@company.twitter, count: 4),它工作正常。

如果有人有一个想法,为什么它以这种方式工作,而不是其他,请继续并让我们知道。我会很高兴知道。