Restforce重构映射表单参数

Restforce refactoring mapping form params

我在我的 rails 应用程序中使用 Restforce gem 将我们的 rails 应用程序连接到 Salesforce。我在 Rails 中创建了一个表单,它创建了一个演讲者请求表单,它是 Salesforce 中的一个对象。我目前有一个代码需要重构,因为它太复杂了。关于如何重构此代码的任何建议?

class RequestASpeakerController < ApplicationController
  def index
  end

  def create
    create_request_a_speaker_form_mapping
    redirect_to page_path('thanks')
  end

  private

  def salesforce_connect
    client = Restforce.new :username => ENV['SALESFORCE_USERNAME'],
      :password       => ENV['SALESFORCE_PASSWORD'],
      :client_id      => ENV['SALESFORCE_CLIENT_ID'],
      :client_secret  => ENV['SALESFORCE_SECRET'],
      :host           => ENV['SALESFORCE_HOST']
    client.authenticate!
    client
  end

  def create_request_a_speaker_form_mapping
    salesforce_connect.create(
      'Thrive_Request_Speaker__c',
      First_Name__c: params[:first_name],
      Last_Name__c: params[:last_name],
      Email__c: params[:email],
      Phone__c: params[:phone],
      Event_Type__c: params[:event_type],
      Event_Name__c: params[:event_name],
      Organization_Hosting_the_Event__c: params[:organization_hosting_the_event],
      Event_Street_Address__c: params[:event_street_address],
      Event_City__c: params[:event_city],
      Event_State__c: params[:event_state],
      Event_Zip__c: params[:event_zip_code],
      Event_Date__c: params[:event_date],
      Event_Hour__c: params[:event_hour],
      Event_Minute__c: params[:event_minute],
      Event_AM_or_PM__c: params[:event_am_or_pm],
      Event_Estimated_Attendance__c: params[:event_estimated_attendance],
      Event_Description__c: params[:event_description],
      Event_Audience_Description__c: params[:event_audience_description],
      Cover_Travel_Expenses__c: params[:cover_travel_expenses],
      Cover_Speaker_Honorarium__c: params[:cover_speaker_honorarium],
      Subscribe_To_Thrive_Communication__c: params[:subscribe_to_our_newsletter]
    )
  end
end

我认为您的代码简单、清晰且可以接受。我不确定你是否应该重构它,但如果你愿意,你可以 "simplify" 参数映射使用这样的东西:

params = {first_name: 'Max'}
options = params.except(:action, :controller).map {|(k, v)| ["#{k.to_s.titleize.gsub(/\s/, '_')}__c", v]}.to_hash

salesforce_connect.create('Thrive_Request_Speaker__c', **options)