Здравствуйте. Есть проект на Rails4 + Mongoid + AngularJS. Одна из составляющий проекта - сложная форма, которая используется для добавления содержимого. Форма динамическая, на клиенте реализована с помощью AngularJS. Вторая динамическая форма используется для поиска по содержимому. Проблема в том, что сейчас эта форма представляет собой несколько разрозненных партиалов, в которых жёстко прописаны необходимые поля. Сейчас, чтобы добавить ещё одну характеристику к объекту, необходимо добавить соответствующее поле в обе формы. Можно ли как-то упростить процесс хранения и обновления формы.
Я рассматривал следующие варианты:
1. Хранить все данные о структуре данных в отдельной коллекции mongo и каждый раз строить таблицу на клиенте на основе этих данных. В административной части добавить функционал для обновления данных о структуре формы. Но структура местами довольно запутанная и постоянное построение формы при загрузке страницы может замедлить работу сайта.
2. Каким-то образом обновлять сами рельсовые шаблоны, тогда решаются проблемы с нагрузкой, но я даже не уверен, что можно редактировать шаблоны напрямую из рельсового приложения.
Если у кого-то есть идеи, как можно упростить работу с подобной формой, буду очень благодарен.
UPD. Приведу примерную структуру формы.
<%= form_for @realty, url: {action: 'create'} do |f| %>
<div id="static">
<%= f.radio_button :action, 'sell', :'ng-model' => 'action' %>
<%= f.radio_button :action, 'rent', :'ng-model' => 'action' %>
<%= f.radio_button :object, 'flat', :'ng-model' => 'object' %>
<%= f.radio_button :object, 'house', :'ng-model' => 'object' %>
</div>
<div id="dinamic">
<%= f.fields_for :options do |f| %>
<div id="sell-flat" ng-if="action='sell' && object='flat'">
<%= render 'sell_flat_attributes', :f => f %>
</div>
<div id="rent-flat" ng-if="action='rent' && object='flat'">
<%= render 'rent_flat_attributes', :f => f %>
</div>
<div id="sell-house" ng-if="action='sell' && object='house'">
<%= render 'sell_house_attributes', :f => f %>
</div>
<div id="rent-house" ng-if="action='rent' && object='house'">
<%= render 'rent_house_attributes', :f => f %>
</div>
<% end %>
</div>
<% end %>
Для каждой комбинации некоторых атрибутов из первого блока таблицы, есть соответствующий набор полей из второго блока. Каждый такой набор вынесен в отдельный партиал. Вопрос собственно в том, можно ли это как-то организовать, чтобы не править руками при каждом изменении. Уточню. Динамическими являются в основном атрибуты в хеше options у каждого объекта. Они вносятся как есть и для них не определяется схема в модели. То есть использовать для этого модель в mongoid не получится.