Я пытаюсь настроить основную функцию календаря, которая будет показывать количество статей, опубликованных за определенный день.Таким образом, мне нужен запрос, который дает дату и счет за этот день из моей таблицы.Прямо сейчас я делаю это:
ActiveRecord::Base.connection.execute("SELECT COUNT(*), DATE(created_at) FROM 'articles' GROUP BY DATE(created_at)")
, который возвращает что-то вроде:
[{"COUNT(*)"=>1, "DATE(created_at)"=>"2011-05-09", 0=>1, 1=>"2011-05-09"
{"COUNT(*)"=>2, "DATE(created_at)"=>"2011-05-12", 0=>2, 1=>"2011-05-12"},
{"COUNT(*)"=>2, "DATE(created_at)"=>"2011-05-13", 0=>2, 1=>"2011-05-13"},
... etc.
Однако, это кажется действительно плохим способом сделать эту конкретную вещь.Я также хотел бы иметь возможность связать это с другими областями, которые я настроил, чтобы вместо этого я мог сделать что-то вроде:
Article.no_spam.date_counts
и получить аналогичный результат.Есть ли более Rails-й способ сделать это?Я использую Rails 3.
РЕДАКТИРОВАТЬ: Никто не ответил, я нашел уродливое, но работоспособное решение, на случай, если оно понадобится кому-нибудь в будущем.Однако, если есть лучший способ сделать это, пожалуйста, дайте мне знать: вот мой код (в Article.rb):
def self.datecount
#this query is a mega hack, but it alows me to chain Article scopes nicely
counts = select("COUNT(created_at) as id, created_at").group("DATE(created_at)")
out = {}
counts.each do |a|
out[a.created_at.to_date] = a.id
end
out
end
это позволяет мне связать мои области видимости, как я хочу Article.no_spam.datecount возвращает хэш {date => counts}, и я могу добавить другие области в стеке.Внутри так ужасно ...