On Rails 5.
我有一个具有access_token
和expires_at
属性的Service
模型。
我正在发出 API 请求以获取访问令牌和过期,但是,在许多情况下,expires_at不存在,在这种情况下,我希望值为零。
在我的控制器中,我正在做一些基本的事情,例如:
@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的方法是什么?很难找到答案。
听起来
你在这里走在正确的轨道上:
@service.access_token = api_response["access_token"]
@service.expires_at = Time.at(api_response["credentials"]["expires_at"]) if api_response["credentials"]["expires_at"].present?
@service.save if @service.changed?
如果您还想检查其他值,您可以执行更常规的操作。
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")