ActiveRecord/sqlite3 column type lost in table view?

Posted by duncan on Stack Overflow See other posts from Stack Overflow or by duncan
Published on 2010-05-06T16:50:49Z Indexed on 2010/05/06 21:18 UTC
Read the original article Hit count: 287

Filed under:
|
|
|

I have the following ActiveRecord testcase that mimics my problem. I have a People table with one attribute being a date. I create a view over that table adding one column which is just that date plus 20 minutes:

#!/usr/bin/env ruby

%w|pp rubygems active_record irb active_support date|.each {|lib| require lib}

ActiveRecord::Base.establish_connection(
:adapter => "sqlite3",
:database => "test.db"
)

ActiveRecord::Schema.define do
  create_table :people, :force => true do |t|
    t.column :name, :string
    t.column :born_at, :datetime
  end

  execute "create view clowns as select p.name, p.born_at, datetime(p.born_at, '+' || '20' || ' minutes') as twenty_after_born_at from people p;"

end

class Person < ActiveRecord::Base
  validates_presence_of :name
end

class Clown < ActiveRecord::Base
end

Person.create(:name => "John", :born_at => DateTime.now)

pp Person.all.first.born_at.class
pp Clown.all.first.born_at.class
pp Clown.all.first.twenty_after_born_at.class

The problem is, the output is

Time
Time
String

When I expect the new datetime attribute of the view to be also a Time or DateTime in the ruby world. Any ideas?

I also tried:

create view clowns as select p.name, p.born_at, CAST(datetime(p.born_at, '+' || '20' || ' minutes') as datetime) as twenty_after_born_at from people p;

With the same result.

© Stack Overflow or respective owner

Related posts about ruby

Related posts about activerecord