Ruby on rails 正在尝试在rails3中创建特定数组

Ruby on rails 正在尝试在rails3中创建特定数组,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,假设我有帖子,帖子是由许多不同的用户创建的 我试图得到一个2D数组,显示每个用户创建的帖子的总数。最后一个数组可能如下所示: [Jeff,2],“Mike”,10],“Jenny”,3]] 等等 我正试图在我的posts模型中创建它,所以类似于: def self.distribution logic here end 谢谢 下面是一个简单的Rails方法: class User def self.distribution User. joins('posts').

假设我有帖子,帖子是由许多不同的用户创建的

我试图得到一个2D数组,显示每个用户创建的帖子的总数。最后一个数组可能如下所示:

[Jeff,2],“Mike”,10],“Jenny”,3]]

等等

我正试图在我的posts模型中创建它,所以类似于:

def self.distribution

logic here

end

谢谢

下面是一个简单的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]]

在rails中使用
count
方法

User.count('posts.id', :include => :posts, :group => "users.name")
该调用返回一个有序散列:

#<OrderedHash {"Jeff"=>2, "Mike"=>10, "Jenny"=>1}>  
该调用返回一个数组:

[["Jeff", 2], ["Mike", 10], ["Jenny", 1]]

在视图html中,数组呈现的引号类似于“";”。我使用的是这样的内容:。知道我如何让“'s显示为”吗?是的,那是因为字符串正在被清理以用于HTML输出。如果不想执行字符串清理,请使用raw(User.distribution.inspect)或User.distribution.inspect.html\u safe。也就是说,我建议您至少在输出用户名时对用户名进行消毒。太棒了,谢谢!我有一个后续问题,我觉得我应该在这里发布,而不是创建一个新的。。我只有存储在用户表中的电子邮件地址。我有一个profiles表,其中包含用户的名称。是否有方法连接正确的配置文件并将其用于数组中的名称?是的,只需添加另一个连接(:profile),然后更新您的选择执行选择('profiles.name,count(posts.id)as counter'),而不是从用户表中选择名称。在我的本地MySQL环境中完成所有操作后,它就会中断Heroku的PG环境。这似乎对我有效,现在唯一的问题是我做得有点倒退。。。我是这样做的:Post.where(:user\u id=>@profile.user.id)。count('posts.id',:include=>:user,:group=>“users.email”)。发送给。在不涉及太多细节的情况下,我需要where语句通过帖子来缩小范围,而不是笼统地抓住所有帖子。所以问题是,我将用户名存储在配置文件模型中-链接到users表(而不是posts表)。。是否有方法获取此数组中的这些配置文件名称?我以为您需要用户列表,您的筛选器将返回单个用户的计数。将查询基于
Post
而不是
User
的另一个缺点是,您不会得到零计数的用户。
[["Jeff", 2], ["Mike", 10], ["Jenny", 1]]