2017-10-30 1 views
0

내가 배운대로 배우는 방법을 정확히 묻지 않습니다. 내 앱에서 제 3 자 CRM 시스템으로 사용자 정보를 생성/업데이트하고 있습니다. after_save 콜백을 사용하여 성공적으로 실행되는 두 가지 방법이 있습니다. 테스트하는 동안 나는 다른 하나를 테스트 할 수 있도록 하나의 주석을 달았지만 지금은 if else 문과 결합해야합니다.변수가 레일스 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으로 충분해야합니다.

관련 문제