Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如果值存在,Rails将更新_属性,否则为nil_Ruby On Rails_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 如果值存在,Rails将更新_属性,否则为nil

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

在轨道5上

我有一个
服务
模型,具有
访问令牌
过期
属性

我正在发出一个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()需要一个有效值,这就是我得到错误的原因。