Rails 3: Пользователь создал пользовательские формы?

Я пытаюсь оборачивать голову тем, как разрешить пользователю создавать пользовательские формы со всеми типами полей. Если есть драгоценный камень, который был бы велик, но я не могу найти нигде.

Итак, у меня есть настройка БД, которая:

  t.integer :form_id
  t.string :name
  t.string :hint
  t.integer :position
  t.string :field_type
  t.boolean :required
  t.integer :size
  t.boolean :multiple
  t.text :values
  t.timestamps

И это в значительной степени, где я. Я не могу подумать, как итерации через field_type и вернуть значения, а также сопоставить их с заполненными формами.

Спасибо

Ответ 1

Я предполагаю, что у вас есть какая-то модель 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

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