2015-07-11 37 views
0

我对rails很新颖,所以这可能是一个愚蠢的问题,但我花了几个小时来调试这个看似简单的错误,并且无处可去。在我的数据库中,我希望每行存储一个数组数组(在一个名为contribution的变量中)。我看,最好的办法做到这一点是通过添加以下代码:如何使用导轨在数据库中存储数字数组

class Goal < ActiveRecord::Base 

    #... 

    serialize :contributions, Array 

    #... 

end 

属性也是goal.rb

ActiveRecord::Schema.define(version: 20150711171452) do 

    create_table "goals", force: :cascade do |t| 
    #... 
    t.decimal "contributions" 
    #... 
    end 

end 

我通过这种迁移添加它:

class AddContributorsToGoals < ActiveRecord::Migration 
    def change 
    add_column :goals, :contributors, :string 
    add_column :goals, :contributions, :decimal 
    end 
end 

唯一的问题是,每当我尝试访问这个属性时,我总是会得到错误,指出它是BigDecimal类型。 Rails认为这是一个单一的数字,但我希望它是一个数字列表。任何想法,我可能做错了什么?一个问题,我得到的

一个例子是,当该执行:

@goal.contributions << @goal.lastUpdateAmount 

但我得到这个错误

undefined method `<<' for #<BigDecimal:7f95e082ab18,'-0.0',9(9)> 

我遵循相同步骤,一个字符串数组,并且被正确串行化。我只是不知道这个是怎么回事。

+1

您是否尝试过使用文本而不是小数? –

+1

检查此链接:[存储阵列中的DB _滑轨] [1] [1]:http://stackoverflow.com/questions/21312278/storing-arrays-in-database-json-vs-序列化数组 –

回答

1

请更改数据类型十进制文本

class AddContributorsToGoals < ActiveRecord::Migration 
    def change 
    add_column :goals, :contributions, :text 
    end 
end 
+0

工作正常!谢谢。 – Nick

相关问题