Audited audited_changes путаница

Я использую проверенное решение коллектива для аудита в рельсах. Итак, в базе данных есть столбец (audited_changes), который является определением TEXT. Когда я получаю аудит из базы данных, я получаю простую строку, и когда я вызываю этот атрибут в представлении, это неформатированная строка. В rdocs говорится, что есть сериализованный хэш всех изменений. Как я могу получить этот хэш? Кроме того, в тех же документах говорится, что есть доступ к old_attributes и new_attributes, как это?

По-моему:

<%= @audit.action %> # => update
<%= @audit.audited_changes %> # => --- name: - oldname - newname code: - oldcode - newcode

Или есть шанс отформатировать это?

2 ответа

Решение

Я думаю, что в настоящее время может быть ошибка в проверенных. Вы используете 3.0.0rc1? Это то, что я использую, и у меня произошло нечто подобное. Во-первых, кажется, что "Audit" не распознается как объект ActiveRecord, поэтому я создал пустую модель в app / models / audit.rb. Как только я сделал это, я увидел поведение, которое вы видите. Чтобы исправить это, я удалил app / models / audit.rb и добавил config/initializers/audited.rb со следующим:

include Audited::Adapters::ActiveRecord

Это старый вопрос, но у меня есть альтернативный ответ, который, кажется, хорошо работает для меня, используя Rails 4.2. Вместо использования инициализатора в ответе выше, я предлагаю сохранить модель и добавить "serialize:audited_changes" в начало.

 class Audit < ActiveRecord::Base
   belongs_to :user
   serialize :audited_changes
 end

Вы можете использовать встроенную модель Audited::Audit для запроса ее данных.

Например,

audit = Audited::Audit.last
audit.audited_changes # => {"name"=>["Steve", "Ryan"]}

"Стив" - это старое значение, "Райан" - новое значение. По умолчанию хеш хранится в базе данных в формате yaml.

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