Конвертировать запрос ActiveRecord в запрос PostgreSQL - PullRequest
0 голосов
/ 29 июня 2018

Я пытаюсь обновить этот код рельсов в сырой PostgreSQL

ValidationEmergency.with_deleted.where(
  code: 'aml_validation_failed', 
  service_name: 'ComplyAdvantage', service_type: nil).each do |e|
    e.update_attributes(
      {
        service_type: 'Screening',
        service_id:   e.message.split(', ').last.split(' => ').last.to_i
      }, without_protection: true
    )
  end

что у меня есть (отредактировано после комментария @ fanta)

ActiveRecord::Base.connection.execute("
  UPDATE validation_emergencies 
  SET 
    service_type = 'Screening', 
    service_id = (
      CAST ( array_upper(string_to_array(message, ' => '), 1) AS INTEGER )
    ) 
  WHERE 
    code = 'aml_validation_failed' 
  AND 
    service_name = 'ComplyAdvantage' 
  AND 
    service_type IS NULL"
)

Тип сервиса обновляется правильно, но service_id нет, все еще изучая, как правильно разделить и gsub с postgresql.

Пожалуйста, сообщите. Спасибо.

1 Ответ

0 голосов
/ 29 июня 2018

Окончательная версия, для service_id оно разделит сообщение, получит последний элемент и приведёт его к целому числу.

ActiveRecord::Base.connection.execute(
  "UPDATE validation_emergencies
   SET
     service_type = 'Screening',
     service_id =
       CAST ((string_to_array(message, ' => '))[array_upper(string_to_array(message, ' => '), 1)] AS INTEGER)
   WHERE
     code = 'aml_validation_failed'
   AND
     service_name = 'ComplyAdvantage'
   AND
     service_type IS NULL"
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...