私が行っているように学んでいるようにこれをどうやって尋ねるか正確には分かりません。私は自分のアプリからサードパーティのCRMシステムにユーザー情報を作成/更新しています。 after_save
コールバックで正常に実行される2つのメソッドがあります。テスト中、私は他のものをテストすることができるように1つコメントしますが、今はそれらをif elseステートメントと組み合わせる必要があります。変数がRails 5のGETリクエストに存在するかどうかを調べる
User
が保存されている場合、システムにはユーザがCRMシステムに存在するかどうかが表示されます(if agile_id?
)。ユーザーが存在する場合は、更新呼び出しまでスキップし、更新された連絡先データを送信しますが、更新されていない場合は、新しいCRM連絡先レコードを作成します。
私はブラウザで受け付けておりますエラーは次のとおりです。
undefined method `agile_id?' for #<User:0x007ffe24cef318>
user.rb
...
after_save :sync_to_agilecrm
...
def sync_to_agilecrm
agile_id = AgileCRM.request :get, 'contacts/search/email/'+email, nil
if agile_id?
contact_data = {
'properties': [
{ 'type': 'SYSTEM', 'name': 'first_name', 'value': first_name },
{ 'type': 'SYSTEM', 'name': 'last_name', 'value': last_name },
{ 'type': 'SYSTEM', 'name': 'email', 'subtype': 'work', 'value': email },
{ 'type': 'SYSTEM', 'name': 'address', 'value': '{\"address\":\"225 George Street\",\"city\":\"NSW\",\"state\":\"Sydney\",\"zip\":\"2000\",\"country\":\"Australia\"}' },
]
}
parsed_contact_data = JSON.parse(contact_data.to_json)
print(AgileCRM.request :post, 'contacts', parsed_contact_data)
else
update_contact_data = {
'id': agile_id,
'properties': [
{ 'type': 'SYSTEM', 'name': 'first_name', 'value': first_name },
{ 'type': 'SYSTEM', 'name': 'last_name', 'value': last_name },
{ 'type': 'SYSTEM', 'name': 'email', 'subtype': 'work', 'value': email },
{ 'type': 'SYSTEM', 'name': 'address', 'subtype': 'work', 'value': address_line1 },
]
}
parsed_update_contact_data = JSON.parse(update_contact_data.to_json)
print(AgileCRM.request :put, 'contacts/edit-properties', parsed_update_contact_data)
end
end
...
この方法は長すぎます。単一のタスクを実行する小さなメソッドに分けてください。 – max
私は 'if agile_id'を使用するつもりだと思っています。 – max
@maxはい、私はagile_idが存在するかどうかを調べようとしていますが、私はそれをもっと短くできればいいと思いますが、言われたように暗闇の中で感じています:) –