2012-07-12 86 views
0

我使用下面的代码段在视图中创建一组checboxes的存储阵列在轨道3.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> 

当我保存的值被成功地存储在DB并在page.But检索背面的模型中的它保存在数据库中的格式是:

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

它就像一个巨大的字符串,带有换行符。我在DB列varachar,我原以为会是3,4

我的模型是

class Umvoxq < ActiveRecord::Base 
end 

我也是在模型中使用

serialize:scenario 

尝试,但它并没有改变格式。有没有一种方法可以纠正格式?

+0

我不使用序列化。 – harshit 2012-07-13 00:26:37

回答

1

不管怎样它都会将它存储在YAML中。这样做的最好的办法是

  • 化妆列的数据类型为文本模型中的[因为有些时候它可能不适合为varchar]
  • 化妆列连载像下面
serialize :scenario, Array 

就是这样。所以当你从Umvoxq访问场景时,你会得到数组中的数据。 P:如果你不想改变列的数据类型,那么你必须将你从表单获得的参数转换为字符串[如2,3,4]并将其存储到数据库。

0

也许有点偏离,但看看像Redis或hstore(建立在PostgreSQL上)的键值存储。我认为他们会很适合那里。