我正在构建一个工具,允许我的应用上的管理员用户创建任意长度的自定义数据收集表单。这些表单将发送给应用程序的用户,以便轮询结果。
数据库结构非常基础,如下所示:
有表单,字段和子字段。
表格是顶级的。字段belongs_to
表单和子字段belongs_to
字段。
表单has_many
字段和字段has_many
子字段。
我希望能够从上到下保存。首先,我将保存表单,并使用返回的ID作为Fields的form_id
。同样,我希望逐个保存字段,并使用返回的ID在相应的子字段中用作field_id
。
这些表单是使用动态表单创建的,管理员用户可以通过单击“添加字段”或“添加子字段”来添加字段和子字段。
解决这个问题的最佳方法是什么?
答案 0 :(得分:0)
我最终使用了名为'backbone-nested-attributes'的宝石,效果很好。它允许您传入要与属性同时保存的所有内容(表单,字段和子字段)。所以我的表单控制器看起来像这样:
class Api::FormsController < ApiController
def create
form = Form.new(form_params)
if form.save
render json: form, root: false
else
render json: {message: form.errors}, status: :bad_request
end
end
private
def form_params
params.permit(:name, :parent_id, :completed, :master_copy, fields_attributes: [:name, :field_type, :required, subfields_attributes: [:value, :selected, :name]])
end
end