创建包含未知字段的表单,并将这些字段存储到模型中的序列化字段中

时间:2011-02-04 15:02:12

标签: ruby-on-rails activerecord

我有一个包含动态集和已知字段集的表单。我需要一种在数据库中存储动态字段的方法,我决定将它们存储在序列化字段中,因为我不需要搜索数据,我只需要存储并在需要时调用它。

class MyApplication < ActiveRecord::Base
    has_one :applicant
    belongs_to :member

    serialize :additional_fields, Hash

    accepts_nested_attributes_for :applicant, :additional_fields

我正在考虑让表单将字段作为additional_fields_attributes返回,并且以某种方式使模型看起来将哈希记录到additional_fields部分。我不确定是否必须使用像缺少方法这样的东西来照顾它,或者我是否应该废弃accepts_nested_attributes_for并自己处理它。

有没有人有任何想法?

谢谢!莱恩

2 个答案:

答案 0 :(得分:1)

我刚刚测试了你的建议。

您不需要:accepts_nested_attributes_for :additional_fields

只需添加您的表单html,如:

<input name="my_application[additional_fields][first]" type="text" /> 
<input name="my_application[additional_fields][second]" type="text" /> 

它会使用密钥保存哈希:firstsecond

您可以在模型中输入一系列字段,例如在用户模型中:

FIELDS= ["item1", "item2"]

在您看来:

<% User::FIELDS.each do |field|%>
     <input name="my_application[additional_fields][<%= field %>]" type="text" /> 
<% end %>

答案 1 :(得分:1)

我最终使用了本教程http://www.kalzumeus.com/2009/11/17/practical-metaprogramming-with-ruby-storing-preferences/,该教程非常有用。

感谢您的帮助!