5

I have a table named monthly_trips in Postgresql. There is a row with values id = 3 & al = 107.415. My problem is when I try to access the value of the "al" column in rails. Using the Rails Console with the code below I get the result of 6154.426156397738. I have no idea what is generating this larger number (57.295779513 times larger to be exact). Any help would be greatly appreciated! Let me know if you need more information.

trip = MonthlyTrip.find(3)
result = trip.al

monthly_trip.rb

class MonthlyTrip < ActiveRecord::Base
  attr_accessible :al, :month, :vehicle_id, :year
  belongs_to :vehicle
end

psql output (select id, al from monthly_trips where id = 3;)

 id |   al    
----+---------
  3 | 107.415
(1 row)

psql output (\d monthly_trips)

   Table "public.monthly_trips"
   Column   |            Type             |                         Modifiers                          
------------+-----------------------------+------------------------------------------------------------
 id         | integer                     | not null default nextval('monthly_trips_id_seq'::regclass)
 vehicle_id | integer                     | 
 year       | integer                     | 
 month      | integer                     | 
 al         | numeric(9,3)                | 
 ak         | numeric(9,3)                | 
 az         | numeric(9,3)                | 
 ar         | numeric(9,3)                | 
 ca         | numeric(9,3)                | 
 co         | numeric(9,3)                | 
 ct         | numeric(9,3)                | 
 de         | numeric(9,3)                | 
 fl         | numeric(9,3)                | 
 ga         | numeric(9,3)                | 
 hi         | numeric(9,3)                | 
 ida        | numeric(9,3)                | 
 il         | numeric(9,3)                | 
 ind        | numeric(9,3)                | 
 ia         | numeric(9,3)                | 
 ks         | numeric(9,3)                | 
 ky         | numeric(9,3)                | 
 la         | numeric(9,3)                | 
 me         | numeric(9,3)                | 
 md         | numeric(9,3)                | 
 ma         | numeric(9,3)                | 
 mi         | numeric(9,3)                | 
 mn         | numeric(9,3)                | 
 ms         | numeric(9,3)                | 
 mo         | numeric(9,3)                | 
 mt         | numeric(9,3)                | 
 ne         | numeric(9,3)                | 
 nv         | numeric(9,3)                | 
 nh         | numeric(9,3)                | 
 nj         | numeric(9,3)                | 
 nm         | numeric(9,3)                | 
 ny         | numeric(9,3)                | 
 nc         | numeric(9,3)                | 
 nd         | numeric(9,3)                | 
 oh         | numeric(9,3)                | 
 ok         | numeric(9,3)                | 
 ore        | numeric(9,3)                | 
 pa         | numeric(9,3)                | 
 ri         | numeric(9,3)                | 
 sc         | numeric(9,3)                | 
 sd         | numeric(9,3)                | 
 tn         | numeric(9,3)                | 
 tx         | numeric(9,3)                | 
 ut         | numeric(9,3)                | 
 vt         | numeric(9,3)                | 
 va         | numeric(9,3)                | 
 wa         | numeric(9,3)                | 
 wv         | numeric(9,3)                | 
 wi         | numeric(9,3)                | 
 wy         | numeric(9,3)                | 
 created_at | timestamp without time zone | not null
 updated_at | timestamp without time zone | not null
Indexes:
    "monthly_trips_pkey" PRIMARY KEY, btree (id)

Migration file

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

pg_locks table

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
24
  • What type did you declare al as in your migration? Commented Dec 10, 2012 at 4:51
  • @cdesrosiers al is declared as a decimal with precision: 9, scale: 3 in my migration. This translated into a numeric(9,3) in Postgresql. Commented Dec 10, 2012 at 4:58
  • 2
    When you read trip.al in the console, you should be getting a BigDecimal object (#<BigDecimal: ... >). What does that look like? Commented Dec 10, 2012 at 6:08
  • 1
    Which version of Rails and pg are you using? I checked a 3.2 app that has a numeric (AKA :decimal) column in the database and it gets pulled out as a BigDecimal. You're getting a Float for some reason and that's not right. Commented Dec 11, 2012 at 1:27
  • 2
    @muistooshort I tried a to_d conversion on the Float in that ruby file and I am generating the same wrong number before it is inserted to PG. It must be a problem with Rails using Ruby's to_d to convert the Float. Thanks for pointing me toward this! Commented Dec 12, 2012 at 21:34

1 Answer 1

1

Your "trip" variable results for an array that's why it returns BigDecimal

You can use this kind of method:

1) Indicated the 1st value returned from ActiveRecord

trip = MonthlyTrip.find(3).first
result = trip.al

OR

2) Looping each element found in the database.

trip = MonthlyTrip.find(3) trip.each do |t| puts t.al end

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.