Rails: как добавить массив переменной длины в модель?

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я довольно новичок в Rails. Я пытаюсь спроектировать модель со следующей структурой:

 Parent

 - Name
 - Date
 - Children
   - Child 1
   - ...
   - Child N
 

Где N — переменная, а дочерний элемент имеет несколько собственных атрибутов.

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

Мои вопросы:

  1. Должен ли я реализовать дочерний элемент как отдельную модель, в которой у родительского элемента много дочерних элементов, или это можно сделать как единую плоскую родительскую модель?
  2. Как бы я реализовал все это как единую форму, т. Е. Все дочерние элементы создаются / изменяются с помощью родительского элемента? Мне нужно было бы создать переменное количество дочерних элементов на стороне клиента, а затем отправить их вместе с родительскими данными, но я не уверен, как это сделать.

Комментарии:

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

Ответ №1:

В порядке запроса:

  1. Я бы добавил дочерние элементы в качестве отдельной модели, если родители и дочерние элементы обладают врожденными уникальными характеристиками. Если нет, я бы сделал это как отдельные объекты в одной модели (у person много людей). Зависит от ваших потребностей.
  2. Для этого вам следует ознакомиться с драгоценным камнем cacoon, который позволяет динамически генерировать поля для дочерних моделей. На странице Github для gem есть несколько примеров, и на ней есть несколько хороших видеороликов на YouTube.