【问题标题】:Updating Rails 5 Initializer with Devise User Parameters使用设计用户参数更新 Rails 5 初始化程序
【发布时间】:2017-09-12 22:35:07
【问题描述】:

在这个挑战之前,我以为我越来越接近于围绕 Rails 进行思考了。我有一个初始化程序agilecrm.rb - 内容如下所示。我正在使用AgileCRM Ruby code 尝试将我的应用程序与 AgileCRM 系统连接起来。使用下面的代码时,底部有测试Create Contact 数组,它成功地在我的 AgileCRM 帐户中创建了一个联系人,所以我知道至少这部分有效。我需要做的是每次创建一个新的 Devise 用户时创建一个新的 AgileCRM 用户。我有一种感觉,我看错了,可能需要一个控制器来解决这个问题,但这对我来说并不完全陌生,但我仍然不知道什么时候该走。谢谢。

config/initializers/agilecrm.rb

require 'net/http'
require 'uri'
require 'json'

class AgileCRM
  class << self
    def api_key=(key)
      @@api_key = key
    end

    def domain=(d)
      @@domain = d
    end

    def email=(email)
      @@email = email
    end

    def api_key
      @@api_key
    end

    def domain
      @@domain
    end

    def email
      @@email
    end

    def request(method, subject, data = {})
      path = "/dev/api/#{subject}"
      case method
        when :get
          request = Net::HTTP::Get.new(path)
        when :post
          request = Net::HTTP::Post.new(path)
          request.body = data.to_json
        when :put
          request = Net::HTTP::Put.new(path)
          request.body = data.to_json
        when :delete
          request = Net::HTTP::Delete.new(path)
        else
          raise "Unknown method: #{method}"
      end
      uri = URI.parse("https://#{domain}.agilecrm.com")
      http = Net::HTTP.new(uri.host, uri.port)
      http.use_ssl = true
      http.verify_mode = OpenSSL::SSL::VERIFY_NONE
      request['Content-Type'] = 'application/json'
      request['Accept'] = 'application/json'
      request.basic_auth AgileCRM.email, AgileCRM.api_key
      response = http.request(request)
      response.body
    end
  end
end

AgileCRM.api_key = '*******'
AgileCRM.domain = '*******'
AgileCRM.email = '*******'

#  ======================Create Contact====================================

contact_data = '{
    "star_value": "4",
    "lead_score": "92",
    "tags": [
        "Lead",
        "Likely Buyer"
    ],
    "properties": [
        {
            "type": "SYSTEM",
            "name": "first_name",
            "value": "John"
        }
    ]
}'
parsed_contact_data = JSON.parse(contact_data)
print(AgileCRM.request :post, 'contacts', parsed_contact_data)

【问题讨论】:

    标签: ruby-on-rails ruby devise ruby-on-rails-5


    【解决方案1】:

    您可能希望将此逻辑移动到您的User 模型中,并使用after_save 挂钩将数据推送到agilecrm。假设 Devise 用户模型被称为 User

    class User < ApplicationRecord
      ...
    
      after_save :sync_to_agilecrm
    
      def sync_to_agilecrm
        # your agilecrm api calls go here
        ...
      end
    
    end
    

    以上内容应该可以实现您想要实现的目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 2020-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多