【问题标题】:Twitter gem not working from controller in RailsTwitter gem 不能从 Rails 中的控制器工作
【发布时间】:2011-09-01 13:56:17
【问题描述】:

我一直在我最新的 Rails 应用程序中使用 Twitter gem,到目前为止没有任何问题。我已经注册了应用程序,在config/initializers/twitter.rb 中设置了 API 令牌,并测试了它在需要 gem 的自定义 rake 测试中是否有效。然而,问题在于,当我尝试从控制器发送推文时,什么也没有发生。我的初始化程序如下所示:

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) 发送测试推文,但是,我的控制器无法使用相同的语法。

我在这里做错了什么?我需要从控制器重新初始化 gem 吗?

【问题讨论】:

  • 经过一番修修补补,我自己弄明白了。见下文。

标签: ruby-on-rails twitter gem


【解决方案1】:

经过一番修改,这是简单的解决方案:

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

将它添加到我的控制器方法中效果很好,因为 Twitter 客户端在应用程序启动时已经过身份验证。顺便说一下,这是发送推文的应用程序,而不是用户通过应用程序发送推文,所以我不需要重新验证。

【讨论】:

    【解决方案2】:

    我还使用 Twitter gem,我在我的誓言中使用和授权控制器,为 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
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多