Rails: Делаем этот запрос независимым от базы данных ...? - PullRequest
1 голос
/ 21 мая 2009

У меня есть две строки в моей модели, написанные для PostgreSQL:

named_scope :by_month, lambda { |month| { :conditions => ["EXTRACT(MONTH FROM recorded_on) = ?", month] }}
named_scope :by_year, lambda { |year| { :conditions => ["EXTRACT(YEAR FROM recorded_on) = ?", year] }}

Я работаю с PostgreSQL, но я работаю с SQLite3. Как я могу написать эти строки так, чтобы это не зависело от базы данных?

Кстати, «записанный_он» формируется из следующего:

Model.recorded_on = Time.parse("Fri, 01 May 2009 08:42:23 -0400")

Ответы [ 2 ]

3 голосов
/ 21 мая 2009

Хорошо, узнал, что есть лучший способ (спасибо этой статье ):

Практически ничего не делать в модели!

date = Date.new(year, month, 1)
Model.find(:all, :conditions => { :recorded_on => date..date.end_of_month })
0 голосов
/ 21 мая 2009

МЕЖДУ должно быть довольно универсальным: как на счет этого:

  named_scope :by_month, lambda { |month| 
    d1 = Date.new(2009, month, 1)
    d2 = d1.end_of_month
    { :conditions => ['recorded_on between ? and ?', d1, d2]}
  }

  named_scope :by_year, lambda { |year| 
    d1 = Date.new(year, 1, 1)
    d2 = d1.end_of_year
    { :conditions => ['recorded_on between ? and ?', d1, d2]}
  }

Если у вас есть время, вам нужно стать немного умнее с часами, минутами и секундами.

...