Извлечь из поля create_by записи значение, указанное в месяце и году в Rails3? - PullRequest
1 голос
/ 07 июня 2011

Я пытаюсь создать боковую панель для моего архива блога, в которой перечислены все месяцы для записей в моем блоге, поэтому при нажатии на ссылку, например «Июнь 2007», загружаются все блоги с 07 июня.Вот мой link_to

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(month.first.strftime("%Y-%m-%d")) %>

month.first - это запись, которую я нашел.Должен ли мой контроллер выглядеть примерно так?:

@blog_posts = BlogPost.where(:created_at.strftime("%Y-%m-%d") => params[:date]).(:select => "title, id, slug, created_at", :order => "created_at DESC")

Я надеялся, что смогу преобразовать поле records_by для записей в формат, который мог бы передать в совпадении, но я получил неопределенный метод erro

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Как насчет этого?

Переведите ссылку на год-месяц:

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(:date => month.first.strftime("%Y-%m")) %>

Затем используйте синтаксис диапазона, чтобы получить SQL МЕЖДУ:

@blog_posts = BlogPost.
              where(:created_at => (params[:date].to_date..(params[:date].to_date + 1.month))).
              order("created_at desc")
0 голосов
/ 07 июня 2011

В основном я согласен с тем, что говорит Дэн Кроук (+1). Единственная ошибка в его ответе состоит в том, что .to_date выдает ошибку, если в params[:date] нет полной строки даты (как в его примере). Поэтому мое предложение будет:

Вид:

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(month.first.strftime("%Y-%m-%d")) %>

Контроллер:

@blog_posts = BlogPost.
  where(:created_at => params[:date].to_date.beginning_of_month..params[:date].to_date.end_of_month).
  order("created_at desc")

Проблема с вашим исходным кодом заключается в том, что вы пытаетесь вызвать strftime на :created_at, что невозможно.

Или, если вам не нравится полная дата в вашем URL, вы можете сделать это:

<%= link_to month.first.strftime("%B %Y"), blog_archive_month_path(month.first.strftime("%Y-%m")) %>

И

@blog_posts = BlogPost.
  where(:created_at => "#{params[:date]}-01".to_date.beginning_of_month.."#{params[:date]}-01".to_date.end_of_month).
  order("created_at desc")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...