Попытка создать определенный массив в rails3 - PullRequest
2 голосов
/ 18 февраля 2011

Допустим, у меня есть сообщения, а сообщения создаются многими разными пользователями.

Я пытаюсь получить массив 2D, который показывает сумму постов, созданных каждым пользователем. Конечный массив может выглядеть так:

[[ "Jeff", 2], [ "Майк", 10], [ "Дженни", 3]]

и т.д.

Я пытаюсь создать это в моей модели сообщений, так что-то вроде:

def self.distribution

logic here

end

Спасибо!

Ответы [ 2 ]

2 голосов
/ 18 февраля 2011

Вот простой способ Rails сделать это:

class User
  def self.distribution
    User.
      joins('posts').
      group('users.id').
      select('users.name, count(posts.id) as counter').
      map{ |entry| [entry.name, entry.counter] }
  end
end

User.distribution
=> [["Jeff",2],["Mike",10],["Jenny",3]]
0 голосов
/ 18 февраля 2011

Используйте метод count в рельсах.

User.count('posts.id', :include => :posts, :group => "users.name")

Вызов возвращает упорядоченный хеш:

#<OrderedHash {"Jeff"=>2, "Mike"=>10, "Jenny"=>1}>  

Вы можете преобразовать результат в массив:

User.count('posts.id', :include => :posts, :group => "users.name").to_a

Вызов возвращает массив:

[["Jeff", 2], ["Mike", 10], ["Jenny", 1]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...