2013-12-13 30 views
2

我正在使用sferik的Twitter Gem如何將Twitter配置移出控制器? (Rails)

我認爲這是非常混亂的存儲配置在控制器我的Twitter的應用程序:

class HomeController < ApplicationController 


    def index 
    require "twitter" 
    client = Twitter::REST::Client.new do |config| 
     config.consumer_key  = "###" 
     config.consumer_secret  = "###" 
     config.access_token  = "###" 
     config.access_token_secret = "###" 
    end 
    @tweets = client.user_timeline(count: 2) 
    end 

    def show 
    end 

end 

我試圖這些信息存儲在/config/initializers/twitter_creds.rb:

require "twitter" 
    client = Twitter::REST::Client.new do |config| 
     config.consumer_key  = "###" 
     config.consumer_secret  = "###" 
     config.access_token  = "###" 
     config.access_token_secret = "###" 
    end 

但我不確定這是否正確,或者我將如何訪問我的控制器內的Twitter客戶端。我注意到有些開發人員使用.yml文件來存儲配置文件。我在尋找指導;什麼是最佳做法,以及如何從我的控制器訪問Twitter客戶端?

+0

客戶端是否有到期時間? – apneadiving

回答

3

關於你的類:

不如你使用一個模塊封裝Twitter的邏輯。我想改變類是這樣的:

class HomeController < ApplicationController 
    include MyTwitterModule 

    def index 
    @tweets = user_timeline(2) 
    end 

    def show 
    end 

end 

,模塊將是這樣的:

require "twitter" 
module MyTwitterModule 
    @@client = Twitter::REST::Client.new do |config| 
    config.consumer_key  = "###" 
    config.consumer_secret  = "###" 
    config.access_token  = "###" 
    config.access_token_secret = "###" 
    end 

    def user_timeline(qt) 
    @@client.user_timeline(count: qt) 
    end 
end 

這僅僅是一個sugestion;)

關於存儲密鑰和標記:

存儲這種信息的更好的方法是使用Rails.env,通過這個你可以使用不同的密鑰或令牌來開發和使用並且沒有存儲在文件中。

看看這gem,它可以幫助你。

我希望這會有所幫助。

+0

感謝您的答案,但我得到「未定義的方法'user_timeline'爲零:NilClass」。任何想法發生了什麼? – Sheldon

+0

你解決了這個錯誤消息:「未定義的方法'user_timeline'爲零:NilClass」?我處於同樣的困境 –

+0

這段代碼沒有測試我按了。如果你確實需要它,你需要一個類變量,即'@@ client'而不是'@ client'。否則,實例變量每次都會丟失。 @ wali-ali – Ron

1

我有困難,包括這是一個模塊,所以把它添加到我的模型代替。

class User < ActiveRecord::Base 

    def user_timeline(qt) 
    twitter_client = initialize_twitter_client 
    twitter_client.user_timeline(count: qt) 
    end 

    private 

    def initialize_twitter_client 
     Twitter::REST::Client.new do |config| 
     config.consumer_key  = "###" 
     config.consumer_secret  = "###" 
     config.access_token  = "###" 
     config.access_token_secret = "###" 
     end 
    end 

end 


class HomeController < ApplicationController 

    def index 
    @user = #however you get the user 
    @tweets = @user.user_timeline(2) 
    end 

end