我有一些名为Pins的对象,用户可以将这些对象发布到网站上。这些图钉具有属于它们的艺术家属性。
是否有方法可以找到哪个艺术家姓名最多发布到网站?基本上我需要找到Pin.all的模式平均值。
展开:这是一个音乐评论网站。用户发表了对相册的评论。这些帖子被称为Pins。每个Pin都有:专辑,:艺术家等。
我要做的是列出网站的统计信息。我有@ pins.count用于总引脚,@ users.count用于总用户数。我想列出最受评论的专辑,哪个艺术家得到最多评论,等等:
<h4>The most reviewed artist on the site: </h4><%= mostReviewed %>
答案 0 :(得分:3)
如果我正确理解您的问题,您可以使用each_with_object
...
@hash = Pins.scoped.each_with_object(Hash.new(0)) do |pin, hash|
hash[pin.artist.id] += 1
end
这会返回一个哈希,其中键是artists
ID,而值是该艺术家有多少Pins
的数量......
如果有大量Pins
,您可以使用find_each
执行此操作:
@hash = Hash.new(0)
Pins.find_each do |pin|
@hash[pin.artist.id] += 1
end
如果您将上述任一项放入控制器方法中,@hash
将可用于辅助方法,然后您可以使用该方法获取评价最多的艺术家。例如:
def mostReviewed
@hash.max_by {|key, value| value }.first
end
这将为您提供具有最高值的键(或艺术家),可以在以下视图中使用:
<h4>The most reviewed artist on the site: </h4><%= mostReviewed %>
答案 1 :(得分:1)
我实际上最终将以下代码放在页面控制器中:
@popular_artist = Pin.count(:all,
:group => 'artist',
:order => 'count(*) DESC').first
以下在我看来只显示艺术家姓名:
<%= @popular_artist[0] %>
答案 2 :(得分:0)
artists = Hash.new(0)
Pin.all.each { |pin| artists[pin.artist] += 1 }