Объем Rails создан в течение месяца

У меня есть некоторые проблемы с написанием моей модели. Я хочу отфильтровать объекты моей модели на основе месяца, в котором они были опубликованы, т.е. модели BlogPost:

scope :published_in_month, ->(date) { where(published_date: date.at_beginning_of_month..date.at_end_of_month) }

Так что это мой метод контроллера:

def list_by_month
    @date = Time.parse("#{params[:year]}/#{params[:month]}")
    puts "DATE IS #{@date}"
    @posts = BlogPost.published_in_month(@date).page(params[:page]).per(10)
    render :index
  end

Итак, распечатанная дата:

DATE IS 2013-12-01 00:00:00 +0100

Но в моем журнале и на странице, где я вижу сообщения за неправильный месяц, это запись в журнале:

SELECT "blog_posts".* FROM "blog_posts" WHERE ("blog_posts"."published_date" BETWEEN '2013-11-30 23:00:00.000000' AND '2013-12-31 22:59:59.999999') LIMIT 10 OFFSET 0

Где это 2013-11-30 исходя из того, когда моя дата ввода 2013-12-01и как я могу переписать свою область, если я допустил ошибку, чтобы произвести неправильный запрос

2 ответа

Решение

Возможно, лучше использовать методы SQL для определения месяца каждой записи:

scope :published_in_month, ->(date) { where("MONTH(created_at) = ?", date.month) }

Версия Postgresql:

scope :published_in_month, ->(date) { where("DATE_PART('month', timestamp created_at) = ?", date.month) }

(не испытано)

Это может помочь:

scope :from_month, -> { where(created_at: DateTime.now.beginning_of_month..DateTime.now.end_of_month) }
Другие вопросы по тегам