@sergeytroinin

Как правильно работать со сложными формами Rails + AngularJS?

Здравствуйте. Есть проект на 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 не получится.
  • Вопрос задан
  • 2623 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы