Ruby on rails Postgresql表值不';t匹配Ruby on Rails活动记录查询结果
我在Postgresql中有一个名为monthly_trips的表。有一行的值id=3&al=107.415。我的问题是当我试图访问rails中“al”列的值时。使用Rails控制台和下面的代码,我得到了6154.426156397738的结果。我不知道是什么导致了这个更大的数字(确切地说是57.295779513倍)。任何帮助都将不胜感激!如果你需要更多信息,请告诉我Ruby on rails Postgresql表值不';t匹配Ruby on Rails活动记录查询结果,ruby-on-rails,postgresql,activerecord,rails-console,Ruby On Rails,Postgresql,Activerecord,Rails Console,我在Postgresql中有一个名为monthly_trips的表。有一行的值id=3&al=107.415。我的问题是当我试图访问rails中“al”列的值时。使用Rails控制台和下面的代码,我得到了6154.426156397738的结果。我不知道是什么导致了这个更大的数字(确切地说是57.295779513倍)。任何帮助都将不胜感激!如果你需要更多信息,请告诉我 trip = MonthlyTrip.find(3) result = trip.al 每月行程.rb class Mont
trip = MonthlyTrip.find(3)
result = trip.al
每月行程.rb
class MonthlyTrip < ActiveRecord::Base
attr_accessible :al, :month, :vehicle_id, :year
belongs_to :vehicle
end
psql输出(每月\d次)
迁移文件
class CreateMonthlyTrips < ActiveRecord::Migration
def change
create_table :monthly_trips do |t|
t.integer :vehicle_id
t.integer :year
t.integer :month
t.decimal :al, precision: 9, scale: 3
t.timestamps
end
end
end
数组的“trip”变量结果,这就是它返回BigDecimal的原因
您可以使用这种方法:
1) 指示从ActiveRecord返回的第一个值
trip = MonthlyTrip.find(3).first
result = trip.al
或
2) 循环数据库中找到的每个元素
trip=MonthlyTrip.find(3)trip
您在迁移中声明了什么类型的
al
?@cdesrosiers al在我的迁移中声明为精度为9、刻度为3的十进制数。这在Postgresql中转换为数字(9,3)。当您在控制台中读取trip.al
时,应该会得到一个BigDecimal
对象(#
)。这看起来像什么?您使用的是哪个版本的Rails和pg
?我检查了一个3.2应用程序,该应用程序在数据库中有一个数值
(又称:decimal
)列,它被作为一个BigDecimal取出。由于某种原因,你得到了一个浮点值,这是不对的。@muistooshort我在那个ruby文件中尝试了对浮点值的to_d转换,我在将其插入PG之前生成了相同的错误数字。Rails使用ruby的to_d来转换浮点值肯定是有问题的。谢谢你给我指点这个!
class CreateMonthlyTrips < ActiveRecord::Migration
def change
create_table :monthly_trips do |t|
t.integer :vehicle_id
t.integer :year
t.integer :month
t.decimal :al, precision: 9, scale: 3
t.timestamps
end
end
end
locktype | database | relation | virtualxid | virtualtransaction | pid | mode | granted
"relation" | 11955 | 11000 | blank | "8/18417" | 25475 | "AccessShareLock" | TRUE
"virtualxid" | blank | blank | "8/18417" | "8/18417" | 25475 | ExclusiveLock" | TRUE
trip = MonthlyTrip.find(3).first
result = trip.al