Лучший способ сделать пользовательский Rails Query - PullRequest
0 голосов
/ 24 мая 2011

Я пытаюсь настроить основную функцию календаря, которая будет показывать количество статей, опубликованных за определенный день.Таким образом, мне нужен запрос, который дает дату и счет за этот день из моей таблицы.Прямо сейчас я делаю это:

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}, и я могу добавить другие области в стеке.Внутри так ужасно ...

Ответы [ 2 ]

0 голосов
/ 24 мая 2011

Лучший способ для self.datecount -

out = counts.group_by(&:created_at)

или

out = counts.map{|a| [a.created_at.to_date, a.id] }.group_by(&:first)
0 голосов
/ 24 мая 2011

Если вы сделаете

Article.group('DATE(created_at)').count

Вы получите хеш из created_at дат для count статей, созданных на эту дату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...