在我的应用中,我有一个名为Address
的模型。其中的address
字段是 only 必填字段,但该模型可以包含任意数量的其他不同属性。
将通过从.csv
文件导入行来创建地址。 CSV 有有address
列但可能有许多其他列,它们可能是其他任何内容,因此无法预测。
如何准确存储此信息,而无需每次都添加新的数据库列?我可以创建类似extra
数据库列的内容来存储不在模型中的列的信息吗?我可以在该字段上运行查询(虽然是个混蛋)吗?最后,当导出将此信息重新导入CSV时,我可以将extra
信息导出回来吗?
答案 0 :(得分:4)
解决此问题的一种方法是将Postgres用作数据库,并使用包含2列的表格:address
和data
,其中数据为jsonb
类型。这给你的是能够推送任意键/值数据。您仍然可以通过SQL查询它并在这些字段上有索引。
替代方案是使用像Mongo或Couch这样的NoSQL数据库。
答案 1 :(得分:0)
您可以将数据SELECT s.e ,
v.T ,
v.G ,
CASE WHEN ( s.a = 'M'
AND s.b = 'N'
AND s.c = 'O'
AND s.d = 'P'
AND s.e = 'Q'
) THEN '0'
WHEN ( s.a = 'M'
AND s.b = 'N'
AND s.c = 'O'
AND s.d = 'P'
) THEN '1'
ELSE '2'
END AS type
FROM table_v AS v
LEFT OUTER JOIN table_s AS s ON ( v.a = s.a
AND v.b = s.b
AND v.c = s.c
)
WHERE ( s.a = 'M'
AND s.b = 'N'
AND s.c = 'O'
AND s.d = 'P'
AND s.e = 'Q'
)
OR ( s.a = 'M'
AND s.b = 'N'
AND s.c = 'O'
AND s.d = 'P'
)
OR ( s.a = 'M'
AND s.b = 'N'
)
存储在任何JSON
类型列中,并将其检索为
text
或
<% @applicant_user_workflow_step.properties.each do |key, value| %>
<tr>
<td><strong><%= key %> </strong></td>
</tr>
<tr>
<td><%= value %></td>
</tr>
<% end %>
Openstruct可让您以[{1}}
的<%= 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 %>
方式访问key
或简单地遵循这一点
博客:http://railscasts.com/episodes/403-dynamic-forms?view=asciicast
回答:Using Rails serialize to save hash to database