Twitter宝石最佳实践 - 控制器与初始化器

时间:2014-01-20 21:41:42

标签: ruby-on-rails twitter-gem

我在Twitter上有一个注册的应用程序,我可以发布到我的Twitter提要。但是,当我将初始化程序放入控制器的创建操作时,我才能使它工作。

        client = Twitter::REST::Client.new do |config|
          config.consumer_key = ''
          config.consumer_secret = ''
          config.oauth_token = ''
          config.oauth_token_secret = ''
        end

        client.update("Hello World!")

我按照这篇文章中的建议达到了这一点:   Twitter integration rails 4 app

如何通过在配置/初始化程序中读取文件来实现这项工作/最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

所以你有几个选择。一种是将twitter客户端分配给初始化程序中的全局变量:

# config/initializers/twitter.rb
$twitter = Twitter::REST::Client.new do |config|
  # ... 
end

然后在其他地方使用$twitter全局变量。我倾向于不喜欢使用全局变量,因为它污染了全局命名空间。我的另一种方法是在相关类上定义类属性。例如,你可以在ApplicationController上定义它,虽然我建议创建一个单独的类来处理更复杂的情况。使用ApplicationController示例,这就是它的样子:

# app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  class << self
    attr_accessor :twitter
  end
end

# config/initializers/twitter.rb
ApplicationController.twitter = Twitter::REST::Client.new do |config|
  # ... 
end

但是,如果您打算使用此方法,我建议您使用单独的类而不是使用应用程序控制器。

答案 1 :(得分:3)

我可能会做以下事情:

# app/controllers/application_controller.rb

def twitter_client

    Twitter::REST::Client.new do |config|
      config.consumer_key        = ENV["TWITTER_CONSUMER_KEY"]
      config.consumer_secret     = ENV["TWITTER_CONSUMER_SECRET"]
      config.access_token        = ENV["TWITTER_ACCESS_TOKEN"]
      config.access_token_secret = ENV["TWITTER_ACCESS_SECRET"]
    end

end

然后,在任何其他控制器或视图中,您应该能够使用twitter_client方法。

例如,这里是一个推文控制器,其中索引操作搜索包含“Foo”的推文并取三个:

# app/controllers/tweets_controller.rb

def index

    @tweets = twitter_client.search("Foo").take(3)

end