我对rails非常陌生,所以这可能是一个愚蠢的问题,但我花了几个小时调试这个看似简单的错误并且无处可去。在我的数据库中,我希望每一行都存储一个数字数组(在一个名为contrib的变量中)。我读到最好的方法是添加以下代码:
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)>
我按照相同的步骤使用一系列字符串,并且已正确序列化。我只是不知道这个是怎么回事。
答案 0 :(得分:1)
请将数据类型十进制更改为文本
class AddContributorsToGoals < ActiveRecord::Migration
def change
add_column :goals, :contributions, :text
end
end