Ruby on rails 如果值存在,Rails将更新_属性,否则为nil
在轨道5上 我有一个Ruby on rails 如果值存在,Rails将更新_属性,否则为nil,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,在轨道5上 我有一个服务模型,具有访问令牌和过期属性 我正在发出一个API请求来获取访问令牌和过期,但是,在许多情况下,expires_不存在,在这种情况下,我希望值为nil 在我的控制器中,我正在执行一些基本操作,如: @service.update_attributes( access_token: api_response["access_token"], expires_at: Time.at(api_response["credentials"]["expires_at
服务
模型,具有访问令牌
和过期
属性
我正在发出一个API请求来获取访问令牌和过期,但是,在许多情况下,expires_不存在,在这种情况下,我希望值为nil
在我的控制器中,我正在执行一些基本操作,如:
@service.update_attributes(
access_token: api_response["access_token"],
expires_at: Time.at(api_response["credentials"]["expires_at"])
)
如果api响应中包含expires\u,那么只有在时更新它的正确方法是什么
我正在考虑设置一个变量(如果存在):
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\u token=api\u响应[“access\u token”]
@service.expires_at=Time.at(api_响应[“凭据”][“expires_at”])如果api_响应[“凭据”][“expires_at”])。是否存在?
@service.save如果@service.changed?
如果还想检查其他值,可以做一些更一般的操作
def检查和返回(api,value=“访问令牌”)
api[值]。是否存在?到期=时间。在(api[值]):到期=无
退货到期日
结束
到期=检查和返回(api\U响应[“凭证”])
@服务。更新属性(过期时间:过期)
使用此选项,还可以传递其他值,例如:
检查和返回(api_响应[“其他_凭证”],“其他_令牌”)
谢谢您的快速回答。Time.at()需要一个有效值,这就是我得到错误的原因。