Отфильтруйте результаты, основанные на проверенных изменениях, с помощью rails audited gem

Я использую проверенный драгоценный камень для отслеживания изменений в записи. Объект аудита выглядит так

  id: 1,
  auditable_id: 1,
  auditable_type: "Customer",
  associated_id: nil,
  associated_type: nil,
  user_id: nil,
  user_type: nil,
  username: nil,
  action: "create",
  audited_changes:
    {"first_name"=>"Milan McClure",
     "last_name"=>"Wilfred Carter IV",
     "email"=>"brian.hahn@vonrueden.com",
     "sms_optin"=>true,
     "title"=>nil,
     "is_deleted"=>false,
     "deleted_at"=>nil,
     "restored_at"=>nil},
  version: 1,
  comment: nil,
  remote_address: nil,
  request_uuid: "6e462bf8-4788-4ec5-a6ee-f31a7a8226d0",
  created_at: Wed, 12 Apr 2017 12:20:39 UTC +00:00>,

и так далее. Теперь я хочу отфильтровать только те аудиты, в которых aud.audited_changes, который является хешем в проверяемом объекте, включает в себя изменение имени. Как я могу запросить этот?

1 ответ

Если вы используете PostgreSQL и этот audited_changes может быть установлен как тип json, тогда запрос может быть запущен как

Audited::Audit.where("(audited_changes->'first_name') не равно NULL & auditable_type =?", "Consumer") # для всех записей типа Consumer

или для определенного объектаAudited::Audit.where("(audited_changes->'first_name') не является нулевым И auditable_type =? AND auditable_id =?", "Consumer", "# {consumer_id}") # для всех записей типа Потребитель

Потому что всякий раз, когда создается объект аудита, audited_changes имеет только тот ключ, который вы изменили при создании / обновлении.

Другие вопросы по тегам