保存数据并重新填充表单,而不为每个字段创建列

时间:2013-02-08 04:10:06

标签: ruby-on-rails forms

我的情况是我需要从用户收集数据,保存数据,然后才能返回并查看数据。在这种情况下,这是一项调查。通常我会创建一个模型并进行一些验证,这将非常简单。

但在这种情况下,问题经常发生变化,如果我这样做,我可能会发现自己正在编写新的迁移并不断进行各种维护。因为我们真正想要的只是数据本身,所以我想到我应该创建一个具有id字段和form_data字段的模型,并且只需将params粘贴到该form_data字段中。这样我所要做的就是改变视图,而不是弄乱模型。

但后来如果我想编辑调查中的数据,我将如何填充表单字段?目标是只在我的老板想要添加新问题时才更改视图。

P.S。我宁愿不使用Surveyor来完成这项任务,因为我希望能够做一些不容易从测量师那里得到的东西。

所以这就是它的样子

SurveySubmissions
  id : integer
  form_data: string

SurveySubmissions.find(1).form_data
   "name":"Kevin"
   "gender":"Male"
   "favorite_color":"blue"

3 个答案:

答案 0 :(得分:1)

如果您使用的是PostgreSQL,可以查看Hstore。一个很好的起点是这个Railscast:http://railscasts.com/episodes/345-hstore(专业插曲,所以它需要付款)。 它允许您将所有问题/答案对存储在单个数据库列中。

您还可以将数据序列化为单个数据库列,如json / yml,并使用模型上的虚拟属性,以便轻松填充表单字段(关于虚拟属性的Railscast剧集:http://railscasts.com/episodes/16-virtual-attributes-revised,还有旧剧集免费)

另一个解决方案(和我最喜欢的)是使用MongoDB + Mongoid及其动态属性。 如果你还没有开始编码,它可能是最好的解决方案。

答案 1 :(得分:0)

这可能对您有所帮助:

用户模型

has_many :surveys

调查模型

belongs_to :user
has_many :questions

提交模型

has_many :questions
belongs_to :user
belongs_to :survey

问题模型

has_many :answers
polymorphic => belongs_to "survey and submissions"

答案模型

belongs_to :submission
belongs_to :question

除此之外,你可以根据自己的要求建立关系和其他需要的东西

答案 2 :(得分:0)

我认为最好的选择是将表单字段保存到数据库中,然后在编辑时使用javascript重新填充表单。所以我将所有字段值拉入变量,然后使用JQuery.each填充字段。

surveySubmissionData = {"incident_id":"2013BaconSupreme",
    "_confirmed":"No",
    "_date_began":"2/26/2013"}

// Put some code here that loops through the surveySubmissionData 
// and populates the form.

jQuery.each(surveySubmissionData, function(i, val) {
    $("#" + i).val(val);
});