Я предполагаю, что у вас есть какая-то модель Form
, а затем какая-то модель Field
и Form has_many :fields
. Правильно?
Построить форму проще, чем просто: получить форму, выполнить итерацию по всем полям и, в зависимости от типа, отобразить правильный код. Если вы используете что-то вроде formtastic или simple_form , код довольно прост.
Но чтобы это работало, внутри вашего контроллера вам нужно будет создать фиктивный объект, который имеет геттер и сеттер для всех полей. Вы можете использовать для этого простой хеш или OpenStruct (лучше). При переборе полей установите хэш с пустыми значениями или значениями по умолчанию.
Я думаю, вы также хотите сохранить результаты формы? Я думаю, что самый простой способ - использовать такую модель, как эта
t.form_id :integer
t.fields_data :text
и сохранить введенные данные в текстовом поле, например, JSON или что-то.
Вы также можете сделать что-то вроде
class FormData
belongs_to :form
end
class FormDataField
belongs_to :form_data
belongs_to :form_field
end
Хотя это самый чистый (вы можете запросить значения заполненных полей для определенной формы), это может быть слишком много накладных расходов.