我的情况是我需要从用户收集数据,保存数据,然后才能返回并查看数据。在这种情况下,这是一项调查。通常我会创建一个模型并进行一些验证,这将非常简单。
但在这种情况下,问题经常发生变化,如果我这样做,我可能会发现自己正在编写新的迁移并不断进行各种维护。因为我们真正想要的只是数据本身,所以我想到我应该创建一个具有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"
答案 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);
});