2016-10-13 5 views
0

私は時間をかけてstackoverflowを調べていますが、ビューファイルでTwitterの宝石のメソッドを呼び出す方法について簡単な説明は見つかりません。以下のファイルを使って、非常に単純なレールを設定し、これをテストするためにtwitter apiクライアントをグローバル変数に設定しました。これは、レールコンソールで動作しますが、私はそれをレールで動作させることはできません。私が手にエラーがundefined method "followers" for nil:NilClassTwitterの宝石のメソッドをtwitterのapiクライアントのビューファイルで呼び出す方法

設定/初期化/ twitter.rb

require 'twitter' 

$client = Twitter::REST::Client.new do |config| 
    config.consumer_key = 'xxxx' 
    config.consumer_secret = 'xxxx' 
    config.access_token = 'xxxx' 
    config.access_token_secret = 'xxxx' 
end 

welcome_controller.rb

class WelcomeController < ApplicationController 

    def index 
    end 

end 

routes.rbを

Rails.application.routes.draw do 
    get 'welcome/index' 
    root 'welcome#index' 
end 

index.html.erb(ありますwelcome.rbの場合)

<h1>Hi there</h1> 

<p><%= $client.user %></p> 

設定ファイルにすべての認証キーを直接入力しているので、ユーザーの詳細を返す必要があります(これは後で抽象化します)。

感謝

+0

私の答えはこれに関する助けとなりましたか? –

答えて

0

あなたはそれは表面上のその貧しい建築意思決定のように思えるビューで実際のTwitterクライアントのメソッドをしたい、なぜあなた自身に尋ねることが最初にすべきことがあります。これは必須ではないので、あなたのアプリを整理するためのより良い方法がないということをイメージするのは難しいです。

クライアントのオブジェクトをインスタンス変数として作成し、それをビューに渡し、Twitterクライアントメソッドをカプセル化してビューで呼び出すヘルパーを持つことができます。下記参照。

class WelcomeController < ApplicationController 
    require 'twitter' 

    def index 
    @client = Twitter::REST::Client.new do |config| 
     config.consumer_key = 'xxxx' 
     config.consumer_secret = 'xxxx' 
     config.access_token = 'xxxx' 
     config.access_token_secret = 'xxxx' 
    end 
    end 
end 

#app/helper/welcome.rb 
module WelcomeHelper 
    def welcome_tweet(twitter_client, message) 
    twitter_client.send_tweet(message) 
    end 
end 

私はよりよい解決策はしかし、単にインスタンス変数(複数可)として視野に入れTwitterクライアントのメソッドの結果を送信し、そこにそれらを表示することであると思います。あなたのビューと外部システムメソッドを結合することは、コードの匂いと悪い考えです。

関連する問題