2013-08-04 5 views
0

Я написал метод для извлечения всех статей, созданных в течение данного года.Prettier ActiveRecord где запрос

def articles_for_year(year) 
    from = Date.strptime("#{year}-01-01").to_datetime 
    to = from.end_of_year 
    where(created_at: from..to) 
en 

Этот метод кажется несколько неуклюжим и низкоуровневым. Можно ли это сделать лучше?

+1

Не кажется неуклюжим или низким для меня вообще. –

+1

вы должны взглянуть на этот вопрос (http://stackoverflow.com/questions/9624601/activerecord-find-by-year-day-or-month-on-a-date-field) – mdemolin

+0

Я думаю, что ваш подход - писать, а @keymone дал больше «рельсов». – sameera207

ответ

3

вы можете преобразовать его в область действия с лямбда:

class Article 
    scope :in_year, -> {|year| where created_at: (year.beginning_of_year..year.end_of_year) } 
end 

я бы утверждать, что передача фактической даты аргумент лучше, чем уходящий год число, но это отдельное обсуждение

также вы можете использовать Time.mktime метод для создания объект даты, strptime обычно очень медленный

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