Rails: Как я могу заблокировать данные в записи, полученной из многих системных таблиц? - PullRequest
1 голос
/ 12 ноября 2009

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

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

Когда создается политика, мне нужно сделать снимок всех этих данных. Если в политику позже вносятся изменения администратором, требуется контроль версий, даже для связанных данных.

Мне интересно, есть ли у кого-нибудь общие решения этой проблемы. В настоящее время я размышляю над потерянными записями, наследованием одной таблицы, оставляя ссылки на системные таблицы на месте, но делаю эти данные недоступными для редактирования, копирую данные в поля в таблице политик (делая это текстовым полем при редактировании, выбирая поле на создать) или создать две таблицы, одну для живых, одну для шаблонов.

Пока лучшее, что я могу придумать, - это совокупность различных методов, описанных выше, в зависимости от потребностей приложений. Это должно быть общая проблема в приложениях !? Есть ли у вас лучшие идеи / советы о том, как решить этот тип проблемы?

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

Не зная точно потребностей приложения, трудно определить, какое решение лучше.

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

Вы можете создать такую ​​модель:

class PolicyHistory< ActiveRecord::Base
   belongs_to :policy
end

class Policy < ActiveRecord::Base
has_many :policy_histories
end

История политики может содержать ваш снимок всех деталей политики и связанных данных в определенный момент и даже того, кто внес изменения.

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

Решением этой проблемы может быть сериализация полного снимка в виде хэша. Таблица истории политики сможет обрабатывать любые изменения в задействованных таблицах.

Надеюсь, это вам поможет!

1 голос
/ 13 ноября 2009

Для поддержки версий моделей может быть полезным плагин vestal_versions (github.com/laserlemon/vestal_versions).

...