Ruby on rails 将变量设置为等于自身,除非它不';不存在

Ruby on rails 将变量设置为等于自身,除非它不';不存在,ruby-on-rails,ruby,variables,Ruby On Rails,Ruby,Variables,我现在正在解析Linkedin API,您可以请求各种字段及其值。有时用户对某个字段有值,有时则没有 例如,如果用户没有输入电话号码,Linkedin将不会返回电话号码字段 对Linkedin的请求示例 电子邮件、名字、姓氏、电话号码 Linkedin回复示例: {"email"=>"test@example.com", "firstName"=>"Brian", "lastName"=>"Weinreich"} 因此,我请求4件事:电子邮件、名字、姓氏、电话号码,它只返回3

我现在正在解析Linkedin API,您可以请求各种字段及其值。有时用户对某个字段有值,有时则没有

例如,如果用户没有输入电话号码,Linkedin将不会返回电话号码字段

对Linkedin的请求示例

电子邮件、名字、姓氏、电话号码

Linkedin回复示例:

{"email"=>"test@example.com", "firstName"=>"Brian", "lastName"=>"Weinreich"}
因此,我请求4件事:
电子邮件、名字、姓氏、电话号码,它只返回3件事。我想知道是否有更快/更有效的方法将变量设置为这些值,这取决于它们是否存在

我就是这样做的。。。但这似乎是多余的

@user.email = profile['emailAddress'] ? profile['emailAddress'] : ""
@user.phone_number = profile['phoneNumber'] ? profile['phoneNumber'] : ""
@user.first_name = profile['firstName'] ? profile['firstName'] : ""
@user.last_name = profile['lastName'] ? profile['lastName'] : ""

这相当简单-设置哈希的默认值:

> profile={"email"=>"test@example.com", "firstName"=>"Brian", "lastName"=>"Weinreich"}
=> {"email"=>"test@example.com", "firstName"=>"Brian", "lastName"=>"Weinreich"}
> profile.default = ""
=> ""
然后,只要简单的任务就可以完成您所需要的:

@user.email = profile['emailAddress']
@user.phone_number = profile['phoneNumber']
@user.first_name = profile['firstName']
@user.last_name = profile['lastName']
对于更复杂的情况,您还可以设置以下值,而不是一个默认值
Proc
block:

profile.default_proc= proc {|hash, key| hash[key] = (key =~ /email/i) ? "default@example.com" : ""}

> profile['email']
=> "test@example.com"
> profile['hiddenEmail1234']
=> "default@example.com"
> profile['some-other-key']
=> ""

这相当简单-设置哈希的默认值:

> profile={"email"=>"test@example.com", "firstName"=>"Brian", "lastName"=>"Weinreich"}
=> {"email"=>"test@example.com", "firstName"=>"Brian", "lastName"=>"Weinreich"}
> profile.default = ""
=> ""
然后,只要简单的任务就可以完成您所需要的:

@user.email = profile['emailAddress']
@user.phone_number = profile['phoneNumber']
@user.first_name = profile['firstName']
@user.last_name = profile['lastName']
对于更复杂的情况,您还可以设置以下值,而不是一个默认值
Proc
block:

profile.default_proc= proc {|hash, key| hash[key] = (key =~ /email/i) ? "default@example.com" : ""}

> profile['email']
=> "test@example.com"
> profile['hiddenEmail1234']
=> "default@example.com"
> profile['some-other-key']
=> ""

好吧,那很容易哈。谢谢为将来的引用调用了什么?我知道它是一个“OR”语句,但为什么它默认为空字符串?是因为配置文件['emailAddress']是假的吗?更正确的说法是因为配置文件['emailAddress']是假的。ruby中的两个错误是
nil
false
。另外:你可以通过使用
配置文件['emailAddress']来避免
|”“
部分。to_s
(因为
nil。to_s
返回
)好的,这很简单。谢谢为将来的引用调用了什么?我知道它是一个“OR”语句,但为什么它默认为空字符串?是因为配置文件['emailAddress']是假的吗?更正确的说法是因为配置文件['emailAddress']是假的。ruby中的两个错误是
nil
false
。另外:你可以通过这样做
profile['emailAddress']来避免
|
部分。to
(因为
nil。to
返回
)2个澄清问题:1)为什么不把属性
nil
?2) 您在哪里设置这些属性?2个澄清问题:1)为什么不将属性保留为nil
?2) 你在哪里设置这些属性?这很好。谢谢那太好了。谢谢