Ruby on rails Twitter gem最佳实践-控制器与初始化器

Ruby on rails Twitter gem最佳实践-控制器与初始化器,ruby-on-rails,twitter-gem,Ruby On Rails,Twitter Gem,我在Twitter上注册了一个应用程序,可以发布到我的Twitter订阅源。但是,我只能在控制器的创建操作中使用初始值设定项时才能使其工作 client = Twitter::REST::Client.new do |config| config.consumer_key = '' config.consumer_secret = '' config.oauth_token = '' config.o

我在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客户端分配给初始值设定项中的全局变量:

# 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
#app/controllers/application_controller.rb
类ApplicationController类我可能只会执行以下操作:

# 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\u客户端
方法

例如,这里有一个tweet控制器,其中索引操作搜索包含“Foo”的tweet,并获取其中三条:

# app/controllers/tweets_controller.rb

def index

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

end

谢谢你的回复。我还是有点困惑。你不喜欢你提出的第一个或第二个选择。是有一个更好的解决方案,还是一个比两害都小的解决方案?再次感谢@布拉德:第一个解决方案很好用。从功能上来说,它们都是一样的,这完全取决于你的喜好。