如何在视图文件中调用Twitter api客户端的Twitter gem方法



我花了几个小时看stackoverflow,找不到关于如何在视图文件中调用twitter gem方法的简单解释。我有一个非常简单的rails设置,使用以下文件,并将twitter api客户端设置为全局变量,以便对此进行测试。它在rails控制台工作,但我不能让它在rails中工作。我得到的错误是undefined method "followers" for nil:NilClass

配置初始化/twitter.rb

require 'twitter'
$client = Twitter::REST::Client.new do |config|
  config.consumer_key = 'xxxx'
  config.consumer_secret = 'xxxx'
  config.access_token = 'xxxx'
  config.access_token_secret = 'xxxx'
end

welcome_controller.rb

class WelcomeController < ApplicationController
  def index
  end
end

routes.rb

Rails.application.routes.draw do
  get 'welcome/index'
  root 'welcome#index'
end

index . html。动词(for welcome.rb)

<h1>Hi there</h1>
<p><%= $client.user %></p>

它应该只是返回我的用户详细信息,因为我已经硬输入了我所有的认证密钥直接到配置文件(我将抽象这些稍后一旦我得到这个工作)。

多谢

您应该问自己的第一件事是为什么要在视图中使用实际的twitter客户端方法?从表面上看,这似乎是一个糟糕的架构决策。很难想象没有更好的方式来组织你的应用程序,这样就不需要了。

回答你的问题,虽然什么可以工作是创建一个客户端对象作为一个实例变量,并传递给视图,并有一个助手封装twitter客户端方法,并在视图中调用它们;见下文.

class WelcomeController < ApplicationController
  require 'twitter'
  def index
    @client = Twitter::REST::Client.new do |config|
      config.consumer_key = 'xxxx'
      config.consumer_secret = 'xxxx'
      config.access_token = 'xxxx'
      config.access_token_secret = 'xxxx'
    end
  end
end
#app/helper/welcome.rb
module WelcomeHelper
  def welcome_tweet(twitter_client, message)
    twitter_client.send_tweet(message)
  end
end

我认为一个更好的解决方案是将twitter客户端方法的结果作为实例变量发送到视图中,并在那里显示它们。将视图与外部系统方法过度耦合是一种代码气味,也是一个坏主意

相关内容

  • 没有找到相关文章

最新更新