2017-10-30 1 views
0

私が行っているように学んでいるようにこれをどうやって尋ねるか正確には分かりません。私は自分のアプリからサードパーティの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 
... 
+0

この方法は長すぎます。単一のタスクを実行する小さなメソッドに分けてください。 – max

+1

私は 'if agile_id'を使用するつもりだと思っています。 – max

+0

@maxはい、私はagile_idが存在するかどうかを調べようとしていますが、私はそれをもっと短くできればいいと思いますが、言われたように暗闇の中で感じています:) –

答えて

2

agile_idagile_id?は同じものではありません。いくつかのメタプログラミングによって有効になっているrecord.attribute?を持つActiveRecordオブジェクトが表示されることがあります。

したがって、agile_idなどの変数を定義するときは、最後に疑問符を追加するだけでは機能しません。単純なif agile_idで十分です。

関連する問題