我有一个 Rails 控制器
class Controllername < application
def method1
obj = API_CALL
session =obj.access_token
redirect_to redirect_url #calls the API authorization end point
#and redirects to action method2
end
def method2
obj.call_after_sometime
end
end
我在 method1 中调用一些 API 来获取对象并在会话中存储访问令牌和机密。method1
完成它的动作。
一段时间后我打电话method2
,现在会话(访问令牌,秘密)已正确存储。
但是,现在里面method2
我需要调用APIcall_after_sometime
使用对象obj
。但现在obj
不可用,因为我没有将其存储在会话中(存储加密对象时我们会收到 SSL 错误)。
我想知道最好的存储方式是什么obj
in method1
以便以后可以使用它method2
EDIT:
当我尝试 Rails.cache 或 Session 时,我收到错误
TypeError - no _dump_data is defined for class OpenSSL::X509::Certificate
谷歌搜索我发现当我在会话中存储加密值时它会抛出此错误。
您可以尝试缓存它,但要小心缓存键,如果每个用户的对象是唯一的,则将用户 ID 添加到缓存键中
class Controllername < application
def method1
obj = API_CALL
Rails.cache.write("some_api_namespace/#{current_user.id}", obj)
session =obj.access_token
end
def method2
obj = Rails.cache.read("some_api_namespace/#{current_user.id}")
obj.call_after_sometime
end
end
如果当您尝试读取缓存时,缓存可能不存在,那么您可以使用fetch
代替read
如果没有找到数据,它将调用 api
def method2
obj = Rails.cache.fetch("some_api_namespace/#{current_user.id}") do
method_1
end
obj.call_after_sometime
end
更多信息在这里 http://guides.rubyonrails.org/caching_with_rails.html#low-level-caching我也在这里写过 http://blog.abushady.com/2015/04/02/using_rails_low_level_caching.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)