2013-12-09 5 views
3

Я только начинаю учиться использовать Rails и иметь значительный опыт работы в Django. Я пытаюсь преобразовать довольно общий запрос в Rails ORM, но не может найти хорошую ссылку на независимое от базы данных решение.Сравнение года и месяца в Rails ORM

Что я хочу сделать, это сравнить дату или месяц в поле created_at с текстом, отправленным с URL-адреса. В Django это просто: я не могу найти простой базы данных независимого решение, чтобы сделать то же самое в Rails

if kwargs.get('year', False): 
    # Filter by year 
    post_list = Post.objects.filter(posting_date__year = kwargs['year']) 
    # Futher filter by month if applicable 
    if kwargs.get('month', False): 
     post_list = post_list.filter(posting_date__month=kwargs['month']) 

. Обратите внимание, что я подчеркиваю независимую базу данных ; Я могу, конечно, написать свой собственный SQL для этого, но я твердо верю в абстракции кода и базы данных.

+0

rails activerecord/activerelation (ORM) - это «просачивающаяся» абстракция вокруг sql, вы должны иметь возможность оставаться «независимой от базы данных», но часто будете использовать фрагменты sql, то есть «Post.where» («title LIKE?», # {params [: title_search]}% "). order (: title)' - что касается фильтрации столбцов datetime, вы можете прочитать это сообщение в блоге, которое я делал по часам - http://jessehouse.com/blog/2013/11/15/work-with-timezones-and-ruby-on-rails/- в зависимости от того, насколько точны ваши результаты – house9

ответ

0

Это может работать

def self.by_year(year) 
    dt = DateTime.new(year) 
    boy = dt.beginning_of_year 
    eoy = dt.end_of_year 
    where("published_at >= ? and published_at <= ?", boy, eoy) 
end 

, но я не уверен, что это лучший способ.

Смежные вопросы