【问题标题】:Create a Rails app that can dynamically create new forms/database tables?创建一个可以动态创建新表单/数据库表的 Rails 应用程序?
【发布时间】:2014-09-03 16:14:32
【问题描述】:
我是一名初级 Rails 开发人员,正在为朋友的业务创建 Rails 应用程序,希望有人能帮助回答我的问题!
我的朋友希望能够创建新表单来从她的客户那里收集信息。她不是程序员,想要一个简单的界面,像谷歌表单这样易于使用的东西。理想情况下,从这些表单收集的信息将存储在主数据库中,这样如果她失去了一位客户,她就不必手动删除该客户在另一个数据库中的条目。
所以我需要想出一个解决方案:
- 不强迫她触摸密码。
- 与主数据库同步以在删除客户端时自动删除/取消表单条目。
有人知道这类问题的优雅解决方案吗?
【问题讨论】:
标签:
mysql
sql
ruby-on-rails
activerecord
【解决方案1】:
这很棘手,并且可能会让您头晕目眩,例如,当您制作用于构建表单的表单时。令人惊讶的是(至少从我的谷歌搜索来看)似乎已经没有解决方案,例如宝石。
您需要考虑表单可能不同的所有不同方式,然后构建一个模式来对其进行建模。类似的东西
User
has_many :form_templates
FormTemplate
#columns: user_id
belongs_to :user
has_many :form_template_fields, :order => "position"
FormTemplateField
#columns: form_template_id, position, name, field_type
FormEntry
#columns form_template_id, user_id
belongs_to :form_template
belongs_to :user
FieldEntry
#columns: form_template_field_id, form_entry_id, data
belongs_to :form_entry
belongs_to :form_template_field
现在,当某人构建一个表单时,他们会创建一个 FormTemplate 对象,然后创建一个 FormTemplateFields 的集合来放置在该表单中。
当有人完成表单时,他们将创建一个 FormEntry 记录,链接到 FormTemplate 和一些 FieldEntry 记录,每个记录都将链接到该 FormTemplate 中的一个 FormTemplateFields。
这不是我的想法,但可能是思考它的一个很好的起点。