Проверка наличия переменной в GET-запросе Rails 5

Не уверен, как именно это спросить, так как я учусь на ходу. Я создаю / обновляю информацию о пользователе из моего приложения в стороннюю CRM-систему. У меня есть два метода, которые успешно работают с after_save Перезвоните. Во время тестирования я бы закомментировал один, чтобы я мог проверить другой, но теперь мне нужно объединить их с оператором if else.

Что должно произойти, когда объединены вместе, это когда 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
...

1 ответ

Решение

agile_id а также agile_id? это не одно и то же. Вы иногда будете видеть объекты ActiveRecord, которые имеют record.attribute? который включен через некоторое метапрограммирование.

Таким образом, при определении переменной, такой как agile_idдобавление знака вопроса в конце не только не работает, но и не требуется. просто if agile_id должно быть достаточно.

Другие вопросы по тегам