我在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
如何通过在配置/初始化程序中读取文件来实现这项工作/最佳做法是什么?
答案 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