在我的应用程序中,我有一个名为Address
的模型。其中的address
字段是唯一的必填字段,但是模型可以有任意数量的不同的其他属性。
地址将通过从.csv
文件中导入行来创建。CSV 具有具有address
列,但可能具有许多其他列,它们可以是其他任何列,因此无法预测。
如何准确地存储这些信息,而不必每次都添加新的DB列?我可以做一些像extra
DB列,从列不在模型中存储信息?我可以在该字段上运行查询(尽管是私生子)吗?最后,当将此信息导出回CSV时,我可以将extra
信息导出吗?
解决这个问题的一种方法是使用Postgres作为数据库,并有一个包含2列的表:address
和data
,其中数据为jsonb
类型。这给了你推送任意键/值数据的能力。您仍然可以通过SQL查询它,并在这些字段上建立索引。
可以选择使用像Mongo或Couch这样的NoSQL数据库。
您可以将您的数据作为JSON
存储在任何text
类型列中。然后像
<% @applicant_user_workflow_step.properties.each do |key, value| %>
<tr>
<td><strong><%= key %> </strong></td>
</tr>
<tr>
<td><%= value %></td>
</tr>
<% end %>
或
<%= fields_for :properties, OpenStruct.new(@applicant_user_workflow_step.properties) do |builder| %>
<% @workflow_step.fields.order(:order_value).each do |field| %>
<div class="row">
<% if field.field_type.eql?('rating') %>
<%= render "applicants/fields/application_custom_rating/rating", field: field, f: builder %>
<% else %>
<%= render "applicants/fields/#{field.field_type}", field: field, f: builder %>
<% end %>
</div>
<% end %>
<% end %>
Openstruct允许您访问key
作为hash
的instance
方法
或者直接按照
博客:http://railscasts.com/episodes/403-dynamic-forms?view=asciicast
答案:使用Rails序列化将哈希保存到数据库