Как обрабатывать изменения в вики с ActiveRecord? - PullRequest
0 голосов
/ 28 января 2010

У меня есть модельная статья, которая имеет ревизии. Редакции имеют множество столбцов, в которых хранится вся информация о статье. Статья также принадлежит к current_revision, который является первичным ключом редакции, которая выбрана в настоящее время. Каждая ревизия никогда не изменяется после создания.

Когда пользователь идет редактировать статью, я хочу отобразить форму, которая показывает все поля, которые находятся в ревизиях, предварительно заполненные этой информацией из current_revision. Это достаточно просто, но когда пользователь отправляется на сохранение, я хочу сравнить каждое поле со значением в current_revision. Если все поля одинаковы, я хочу ничего не делать и отбрасывать форму сообщения. Однако если какое-либо из полей отличается, я хочу создать новую редакцию вместо записи в предыдущую редакцию.

Как я могу определить, изменилось ли какое-либо поле, кроме как путем ручного жесткого кодирования теста для каждого поля Ревизии?

1 Ответ

2 голосов
/ 28 января 2010

Есть встроенные методы для обнаружения изменений в Active Record.

API имеет хорошую документацию по отслеживанию изменений: http://ar.rubyonrails.org/classes/ActiveRecord/Dirty.html.

В вашем случае нужно просто определить, какие поля были изменены в статье, а затем создать новую ревизию из этого.

Что-то вроде:

article= Article.find(id)
article.attributes = params[:article]
if article.changed?  
  //new revision
end
...