【问题标题】:Twitter gem works just in 1 controller. Returns nil otherwiseTwitter gem 仅在 1 个控制器中工作。否则返回 nil
【发布时间】:2015-06-11 01:54:23
【问题描述】:

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

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

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

还有那些印刷品:

nil
"example handle"

编辑:

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

【问题讨论】:

  • 你测试过Company.find_by_id(params[:id])是否真的返回了一些东西吗?顺便说一句:Company.find(params[:id] 也在做同样的工作。
  • 是的,它确实返回了公司对象。我在视图中使用了 100 次以上,所以这应该不是问题。
  • 我稍微搜索了 gem 的来源,但找不到 twitter 方法。只是为了解释:twitter_handle(home action)和twitter(show action)有什么区别?
  • 这是模型的一个属性,我用它来传递 twitter 句柄作为它的动态。方法是user_timeline("twitter handle") 在我的例子中,在Company 对象中,twitter 句柄在twitter 属性内。它在这里解释:github.com/sferik/twitter

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多