我正在使用Rails中的heroku api,并遇到了一个潜在的问题。
提交登录表单后,我将实例化heroku对象。
heroku = Heroku::API.new(:username => USERNAME, :password => PASSWORD)
然后我想在所有控制器中使用heroku对象来进一步查询api。我试过@heroku,@@ heroku和$ heroku,但都没有用。这可能吗?
我发现使用api获取用户api密钥的唯一解决方案,将其存储在会话中,然后使用它在每个控制器方法中重新实例化heroku对象。这是最好/唯一的解决方案吗?
答案 0 :(得分:1)
通常,before_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来设置所有控制器均可访问的实例变量。 Read about filters here
至于将API密钥存储到会话中,这是有效的,但如果您想要长期访问,则可能需要将API密钥写入数据库。与之前的过滤器结合使用,您可以执行以下操作:
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