Porównywanie dat

Chciałem sobie ułatwić prace i na potrzeby prac deweloperskich zrezygnowałem z mysql i pracuję na sqlite. Wszystko działało ładnie do momentu kiedy pojawiły się daty.

[code]class CreateArticles < ActiveRecord::Migration
def change
create_table :articles do |t|
t.string :title
t.text :content
t.belongs_to :user
t.boolean :accepted, :default=>false
t.datetime :visible_from
t.datetime :visible_to

  t.timestamps
end
add_index :articles, :user_id

end
end

class Article < ActiveRecord::Base
belongs_to :author, :class_name=>‘User’, :foreign_key=>:user_id

default_scope order(‘created_at DESC’)
scope :accepted, where(:accepted=>true)
scope :unaccepted, where(:accepted=>false)

def self.visible
where(‘visible_from <= :time and visible_to >= :time’, :time=>Time.now)
end
end[/code]
Wygląda to poprawnie ale niestety nie działa. Przykład z konsoli:

Loading development environment (Rails 3.1.0.rc4) irb(main):001:0> Article.first Article Load (0.2ms) SELECT "articles".* FROM "articles" ORDER BY created_at DESC LIMIT 1 => #<Article id: 1, title: "First article", content: "-= Mój pierwszy dokument =-\nTo jest mój pierwszy ...", user_id: 1, accepted: false, visible_from: "2011-07-03 10:33:52", visible_to: "2012-07-03 10:33:52", created_at: "2011-07-03 10:33:52", updated_at: "2011-07-03 10:33:52"> irb(main):002:0> Article.visible.all Article Load (0.2ms) SELECT "articles".* FROM "articles" WHERE (visible_from <= '2011-07-03 13:13:20.607603' and visible_to >= '2011-07-03 13:13:20.607603') ORDER BY created_at DESC => []
Zwraca pusty zestaw a powinien zwrócić co najmniej ten pierwszy rekord (w rzeczywistości więcej).

Co zrobić z tymi datami? Czyżby praca z SQLite nie pozwalała na operacje na datach?

Wygląda dobrze. Choć przykładowy Article.first nie mieści się w przedziale czasowym metody .visible i słusznie nie jest zwracamy.

Polecam pracować jednak na środowisku deweloperskim z taką samą bazą danych jak na produkcji. Czasami AR zachowuje się różnie w zależności od bazy danych, a czasem trzeba napisać trochę SQLa.