Отфильтруйте результаты, основанные на проверенных изменениях, с помощью 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 имеет только тот ключ, который вы изменили при создании / обновлении.