Rails: 设计一个属性未知的模型
Rails: designing a model with unknown attributes
在我的应用程序中,我有一个名为 Address
的模型。其中的address
字段是唯一必填字段,但模型可以有任意数量的不同的其他属性。
地址将通过从 .csv
文件中导入行来创建。 CSV 有 有一个 address
列,但可能有许多其他列,它们可以是任何其他内容,因此无法预测。
我怎样才能准确地存储这些信息而不必每次都添加新的数据库列?我可以制作类似 extra
数据库列的东西来存储来自不在模型中的列的信息吗?我可以 运行 查询该字段(尽管是混蛋)吗?最后,当 将此信息导出 回 CSV 时,我可以将 extra
信息导出回来吗?
解决这个问题的一种方法是使用 Postgres 作为数据库,并有一个包含 2 列的 table:address
和 data
,其中数据是 jsonb
类型.它给你的是推送任意 key/value 数据的能力。您仍然可以通过 SQL 查询它并在这些字段上建立索引。
替代方案是使用 NoSQL 数据库,例如 Mongo 或 Couch。
您可以将数据作为 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
作为 instance
方法访问 hash
或者简单地按照这个
博客:http://railscasts.com/episodes/403-dynamic-forms?view=asciicast
答案:Using Rails serialize to save hash to database
在我的应用程序中,我有一个名为 Address
的模型。其中的address
字段是唯一必填字段,但模型可以有任意数量的不同的其他属性。
地址将通过从 .csv
文件中导入行来创建。 CSV 有 有一个 address
列,但可能有许多其他列,它们可以是任何其他内容,因此无法预测。
我怎样才能准确地存储这些信息而不必每次都添加新的数据库列?我可以制作类似 extra
数据库列的东西来存储来自不在模型中的列的信息吗?我可以 运行 查询该字段(尽管是混蛋)吗?最后,当 将此信息导出 回 CSV 时,我可以将 extra
信息导出回来吗?
解决这个问题的一种方法是使用 Postgres 作为数据库,并有一个包含 2 列的 table:address
和 data
,其中数据是 jsonb
类型.它给你的是推送任意 key/value 数据的能力。您仍然可以通过 SQL 查询它并在这些字段上建立索引。
替代方案是使用 NoSQL 数据库,例如 Mongo 或 Couch。
您可以将数据作为 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
作为 instance
方法访问 hash
或者简单地按照这个
博客:http://railscasts.com/episodes/403-dynamic-forms?view=asciicast
答案:Using Rails serialize to save hash to database