在Rails 5上。
我有一个Service
模型,该模型具有access_token
和expires_at
属性。
我正在发出API请求以获取访问令牌和到期时间,但是,在许多情况下,expires_at不存在,在这种情况下,我希望该值为nil。
在我的控制器中,我正在做一些基本的事情,例如:
@service.update_attributes(
access_token: api_response["access_token"],
expires_at: Time.at(api_response["credentials"]["expires_at"])
)
如果api响应包含expires_at
,仅更新if api_response["credentials"]["access_token"].present?
expiry = api_response["credentials"]["access_token"]
else
expiry = nil
end
的正确方法是什么?
我正在考虑设置一个变量(如果存在)
@service.update_attributes(expires_at: expiry)
然后更新,就像...
'('
但这似乎不是正确的方法。而且,如果我需要从api响应中检查多个值,那么将有很多额外的代码仅用于检查状态。
Rails这样做的方式是什么?很难找到答案。
答案 0 :(得分:0)
听起来像您在这里的正确轨道上
Pipfile.lock
答案 1 :(得分:0)
如果您还想检查其他值,则可以做一些更常规的事情。
def check_and_return(api, value = "access_token")
api[value].present? ? expiry = Time.at(api[value]) : expiry = nil
return expiry
end
expiry = check_and_return(api_response["credentials"])
@service.update_attributes(expires_at: expiry)
与此同时,您还可以传递其他值,例如:
check_and_return(api_response["other_credentials"], "other_token")