1

現在LinkedinAPIを解析していますが、さまざまなフィールドとその値をリクエストできます。ユーザーがフィールドの値を持っている場合もあれば、持っていない場合もあります。

たとえば、ユーザーが電話番号を入力しなかった場合、Linkedinは電話番号フィールドを返しません。

Linkedinへのリクエストの例

email, firstName, lastName, phoneNumber

Linkedinからの応答例:

{"email"=>"test@example.com", "firstName"=>"Brian", "lastName"=>"Weinreich"}

だから、私は4つのものを要求します:email, firstName, lastName, phoneNumberそしてそれは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'] : ""
4

2 に答える 2

8
@user.email = profile['emailAddress'] || ""
@user.phone_number = profile['phoneNumber'] || ""
@user.first_name = profile['firstName'] || ""
@user.last_name = profile['lastName'] || ""
于 2013-03-18T15:16:09.440 に答える
3

これは非常に簡単です。ハッシュのデフォルト値を設定します。

> 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より複雑なケースでは、1つのデフォルト値ブロックの代わりに設定することもできます。

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']
=> ""
于 2013-03-18T16:23:01.977 に答える