1

Railsでherokuapiを使って遊んでいて、潜在的な問題に遭遇しました。

ログインフォームを送信した後、herokuオブジェクトをインスタンス化しています。

heroku = Heroku::API.new(:username => USERNAME, :password => PASSWORD)

次に、すべてのコントローラーでherokuオブジェクトを使用して、APIをさらにクエリします。@ heroku、@@ heroku、$ herokuを試しましたが、うまくいきません。これは可能ですか?

私が見つけた唯一の解決策は、APIを使用してユーザーのAPIキーを取得し、これをセッションに保存してから、各コントローラーメソッド内でherokuオブジェクトを再インスタンス化するために使用することです。これは最良の/唯一の解決策ですか?

4

1 に答える 1

1

一般に、abefore_filterは再インスタンス化の問題を解決できます。すべてのコントローラーメソッドで使用できるインスタンス変数を設定する場合は、次のようにします。

class UsersController < ApplicationController

  before_filter :get_user

  def profile
    # @user is accessible here
  end

  def account
    # @user is accessible here
  end

  private 

  def get_user
    @user = User.find(params[:id])
  end

end

また、アプリケーションコントローラーでbefore_filtersを使用して、すべてのコントローラーでアクセス可能なインスタンス変数を設定することもできます。 ここでフィルターについて読んでください

APIキーをセッションに保存することに関しては、それは機能しますが、長期間のアクセスが必要な場合は、データベースにAPIキーを書き込むことをお勧めします。beforeフィルターと組み合わせると、次のようなことができます。

class ApplicationController < ActionController::Base

  before_filter :setup_heroku

  def setup_heroku
    if current_user && current_user.heroku_api_key
      @heroku = Heroku::API.new(:api_key => current_user.heroku_api_key)
    end
  end

end
于 2012-11-04T09:26:17.350 に答える