Rails update_attributes如果存在值,则为零

时间:2019-07-19 18:11:13

标签: ruby-on-rails ruby-on-rails-5

在Rails 5上。

我有一个Service模型,该模型具有access_tokenexpires_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这样做的方式是什么?很难找到答案。

2 个答案:

答案 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")