【发布时间】:2013-12-18 20:59:00
【问题描述】:
我有一个 postgres 数据库,每行代表一个“索引”(只是一个名称而不是关键字)。对于每个市场,都有一个属性“stats”,它是我从外部来源放入数据库的二维数字数组。
create_table "indices", force: true do |t|
t.string "name", null: false
t.float "returns", default: [], array: true
t.float "navs", default: [], array: true
t.float "stats", default: [], array: true
t.string "updated_at"
t.string "created_at"
t.integer "idx_type_id"
end
我的问题是如何将 stats 值从 db 中取出并输入到我的 rails 程序中?
在控制台中,我尝试了以下代码:
a = Index.find(1)
a.name
a.stats
它正确获取了 name 属性,但我得到了 stats 属性的以下错误
undefined method `to_f' for ["0.259854651130407", "0.261425018884344"]:Array
方括号内的数字是二维数组第一行的值。有什么想法吗?
编辑:我正在运行 rails 4.0.1,这是创建表的原始迁移。这里有语法错误吗?
class CreateIndices < ActiveRecord::Migration
def change
create_table :indices, {:id => false} do |t|
t.string :name
t.float :returns, array: true, default: []
t.float :navs, array: true, default: []
t.float :sharpe
t.timestamps
end
execute "ALTER TABLE indices ADD PRIMARY KEY (name);"
end
end
编辑 2:这是 psql 中以下查询的输出
查询:
select stats from indices where id < 3
输出:
stats
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------
{{0.259854651130407,0.261425018884344},{0.114409534648231,0.113829156756227},{2.27126744225792,2.28284789710692},{0.0562802038101342,0.0561701509132937},{4.61715902819129,4.65416265816855},{0.0
92128059492271,0.0921734852013666},{2.82058096699852,2.81919090465893},{0.0292770008925915,0.0291771074372238},{8.87572644765545,8.95993612275702}}
{{0.259854651130407,0.261425018884344},{0.114409534648231,0.113829156756227},{2.27126744225792,2.28284789710692},{0.0562802038101342,0.0561701509132937},{4.61715902819129,4.65416265816855},{0.0
92128059492271,0.0921734852013666},{2.82058096699852,2.81919090465893},{0.0292770008925915,0.0291771074372238},{8.87572644765545,8.95993612275702}}
(2 rows)
【问题讨论】:
-
这是什么版本的 Rails?
-
我正在运行 rails 4.0.1
-
在
psql中使用\d indices检查数据库中的表定义。 -
在表定义中,它的类型为双精度[],修饰符为默认的'{}'::双精度[]。当我有一个二维数组时,它被声明为一维数组也很重要,在 PG 文档中它似乎暗示它没有,因为它实际上并没有强制数组的维度或长度。
-
所以整个数组看起来更像
[[0.25, 0.26]]而不是[0.25, 0.26]?也许包括来自psql的一些select stats from indices数据将有助于澄清事情。我目前的猜测是 Rails4 只理解一维数组。
标签: ruby-on-rails arrays postgresql ruby-on-rails-4