检查 Rails 中是否存在变量 5 GET 请求
Checking if variable exists in Rails 5 GET request
我在学习的过程中不确定如何提出这个问题。我是 creating/updating 从我的应用程序到第三方 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
...
agile_id
和 agile_id?
不是一回事。您有时会看到具有 record.attribute?
的 ActiveRecord 对象,这些对象是通过一些元编程启用的。
所以,在定义agile_id
这样的变量时,在末尾加一个问号不仅行得通,也没有必要。一个简单的 if agile_id
就足够了。
我在学习的过程中不确定如何提出这个问题。我是 creating/updating 从我的应用程序到第三方 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
...
agile_id
和 agile_id?
不是一回事。您有时会看到具有 record.attribute?
的 ActiveRecord 对象,这些对象是通过一些元编程启用的。
所以,在定义agile_id
这样的变量时,在末尾加一个问号不仅行得通,也没有必要。一个简单的 if agile_id
就足够了。