Rails:设计一个具有未知属性的模型



在我的应用程序中,我有一个名为Address的模型。其中的address字段是唯一的必填字段,但是模型可以有任意数量的不同的其他属性。

地址将通过从.csv文件中导入行来创建。CSV 具有具有address列,但可能具有许多其他列,它们可以是其他任何列,因此无法预测。

如何准确地存储这些信息,而不必每次都添加新的DB列?我可以做一些像extra DB列,从列不在模型中存储信息?我可以在该字段上运行查询(尽管是私生子)吗?最后,当此信息导出回CSV时,我可以将extra信息导出吗?

解决这个问题的一种方法是使用Postgres作为数据库,并有一个包含2列的表:addressdata,其中数据为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作为hashinstance方法

或者直接按照
博客:http://railscasts.com/episodes/403-dynamic-forms?view=asciicast
答案:使用Rails序列化将哈希保存到数据库