0

我使用以下代码段在视图中创建一组复选框

<div class="field">
<b> <%= f.label :scenario %><br /></b>
  <% Scenarios.all.each do |scenario| -%>
    <%= check_box_tag 'umvoxq[scenario][]', scenario.id, @umvoxq.scenario.include?(scenario.id.to_s) -%>
    <%= label_tag :scenario, scenario.name -%>
  <% end -%>
</div>

当我保存模型时,值已成功存储在数据库中并在页面上检索回来。但它保存在数据库中的格式是:

| ---
- '3'
- '4'
 |

它就像一个带有换行符的巨大字符串。我在 DB 中的专栏是 varachar,我希望是3,4

我的模型是

class Umvoxq < ActiveRecord::Base
end

我也尝试过使用

serialize:scenario 

在模型中,但它没有改变格式。有没有办法纠正格式?

4

2 回答 2

1

无论如何不要打扰格式,它将它存储在 YAML 中。最好的方法是

  • 将列数据类型设为文本 [因为有时它可能不适合 varchar]
  • 使列在您的模型中序列化,如下所示
serialize :scenario, Array

而已。因此,当您从 Umvoxq 访问场景时,您将获得数组中的数据。

PS:如果您不想更改列的数据类型,那么您必须将您从表单获得的参数转换为字符串[如 2,3,4] 并将其存储到 db。

于 2012-07-13T07:05:17.043 回答
0

也许有点离题,但看看 Redis 或 hstore 等键值存储(基于 PostgreSQL 构建)。我认为他们会很适合那里。

于 2012-07-13T07:27:33.980 回答