У меня есть следующий тестовый сценарий ActiveRecord, который имитирует мою проблему.У меня есть таблица людей с одним атрибутом даты.Я создаю представление над этой таблицей, добавляя один столбец, который является только этой датой плюс 20 минут:
#!/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
Проблема в том, что вывод будет
Time
Time
String
Когда я ожидаю новую дату и времяАтрибут представления также должен быть Time или DateTime в мире ruby.Есть идеи?
Я тоже пробовал:
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;
С таким же результатом.