2011-09-01 62 views
1

我一直在我的最新的Rails應用程序中使用Twitter的寶石,迄今沒有任何問題。我已經註冊了應用程序,已經在config/initializers/twitter.rb中設置了API令牌,並且已經測試過它可以在需要gem的自定義rake測試中工作。但問題是,當我嘗試從控制器發送推文時,什麼都不會發生。我的初始化看起來像這樣:Twitter的寶石不工作從控制器在Rails

require 'twitter' 

Twitter.configure do |config| 
    config.consumer_key = '###' 
    config.consumer_secret = '###' 
    config.oauth_token = '###' 
    config.oauth_token_secret = '###' 
end 

###在我的應用程序正確填寫,很明顯。在我的rake文件中,我需要文件頂部的gem,然後可以發送測試推文Twitter.update(tweet)但是,相同的語法不適用於我的控制器。

我在這裏做錯了什麼?我是否需要重新初始化控制器中的寶石?

+0

經過一番修補之後,我想出了自己的想法。見下文。 – bjork24

回答

2

一些修修補補之後,這是簡單的解決方案:

@twitter = Twitter::Client.new 
@twitter.update(tweet) 

並稱,到我的控制器的方法非常完美,因爲當應用程序啓動的Twitter客戶端已經通過身份驗證。這是應用程序發送推文,順便說一下,不是用戶通過應用程序發送推文,所以我不需要重新進行身份驗證。

1

我也使用Twitter的寶石,我使用和授權控制器爲我的誓言,直接消息控制器的Twitter的DM和在前面的Ajax。該AppConfig只是一個yml文件,其中有我的信用。

authorizations_controller.rb

class AuthorizationsController < ApplicationController 
    def new 
    set_oauth 
    render :update do |page| 
     page.redirect_to @oauth.request_token.authorize_url 
    end 
    end 

    def show 
    @oauth ||= Twitter::OAuth.new(AppConfig['consumer']['token'], AppConfig['consumer']['secret']) 
    @oauth.authorize_from_request(session['rtoken'], session['rsecret'], params[:oauth_verifier]) 

    session['rtoken'] = nil 
    session['rsecret'] = nil 
    session['atoken'] = @oauth.access_token.token 
    session['asecret'] = @oauth.access_token.secret 
    redirect_path = session['admin'] ? admin_tweets_path : root_path 
    redirect_to redirect_path 
    end 
end 

direct_messages_controller.rb

class DirectMessagesController < ApplicationController 
    before_filter :authorize 

    def create 
    @client.update("@#{AppConfig['user']} #{params[:tweet][:text]}") 

    render :update do |page| 
     page.replace_html 'tweet_update', "Your tweet has been sent to #{AppConfig['user']} and should be updated momentarily." 
    end 
    end 
end 

view.html.haml

#tweet_update 
    - form_remote_tag :url => direct_messages_url, :method => :post, :loading => "$('tweet_update').hide();$('loading').show()", :complete => "$('tweet_update').show();$('loading').hide()" do 
    %div{:class => "subheader float_left"}Tweet to Whoever 
    - if session_set? 
     %input{:type => "image", :src=>"/images/sendButton.jpg", :class =>"float_right", :style=>"margin-bottom: 4px"} 
    - else 
     %div{:class => "float_right", :id => "twitter_login_button"}= link_to_remote image_tag('twitter-darker.png'), :url => new_authorization_url, :method => :get 
    .float_clear 
    #tweetbox_bg 
     - textarea_options = {:id => "tweetbox", :style => "overflow: auto", :rows => "", :cols => ""} 
     - textarea_value = nil 
     - unless session_set? 
     - textarea_options.merge!(:disabled => "disabled") 
     - textarea_value = "Please login to tweet Whoever!" 

     = text_area_tag 'tweet[text]', textarea_value, textarea_options 

我的過濾器之前 '授權' 只檢查會話:

def authorize 
    session_set? ? set_client : redirect_to(new_authorization_url) 
end 

希望這有助於。