【问题标题】:Checking if variable exists in Rails 5 GET request检查Rails 5 GET请求中是否存在变量
【发布时间】:2017-10-30 22:17:25
【问题描述】:

在我边走边学的过程中,我不确定如何问这个问题。我正在从我的应用程序创建/更新用户信息到第三方 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
...

【问题讨论】:

  • 那个方法太长了。将其分成执行单个任务的较小方法。
  • 我猜你打算使用if agile_id
  • @max 是的,我正在尝试找出是否有agile_id,我希望我可以缩短它,但如上所述,我只是在摸索中摸索:)
  • ? 用于 ruby​​ 中的方法名称。像 (!) 一样,它对解析器没有特殊意义。但惯例是以? 结尾的方法必须返回一个布尔值。命名局部变量时不能使用?!

标签: ruby-on-rails ruby-on-rails-5 agile-crm


【解决方案1】:

agile_idagile_id? 不是一回事。您有时会看到带有record.attribute? 的 ActiveRecord 对象,这是通过一些元编程启用的。

因此,在定义agile_id 等变量时,在末尾添加问号不仅行得通,也不需要。一个简单的if agile_id 就足够了。

【讨论】:

    猜你喜欢
    • 2011-06-21
    • 2019-07-05
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2014-09-08
    • 2019-11-19
    • 2022-06-24
    相关资源
    最近更新 更多