0

我创建了一个可以在 Rails 中销售音乐的网站。我想根据他们的音乐销量返回本周最受欢迎的艺术家。下面是模型关系的简要概述。

楷模

# Artist
attr_accessible :name, :website etc.

has_many :songs, :through => :artist_song
has_many :artist_song

# Cart

attr_accessible :purchased_at, :user_id, :id, :songs, :cart_song
      
has_many :songs, :through => :cart_song
has_many :cart_song

# Song

has_many :carts, :through => :cart_song
has_many :cart_song
      
has_many :artists, :through => :artist_song
has_many :artist_song

我可以使用下面的代码检索过去“x”天所有售出的歌曲,但不确定如何在这些结果中实现分组或计数。

Song.find(:all, :conditions => ['carts.purchased_at IS NOT NULL AND carts.purchased_at >= ?', 7.days.ago.at_midnight], :include => :carts)

我猜你会通过一个独特的属性进行某种形式的分组或计数,但我有点卡在这里,所以任何帮助都会非常感激。谢谢。

4

1 回答 1

0
Song.select('?').where(
  'carts.purchased_at IS NOT NULL AND carts.purchased_at >= ?',
  7.days.ago.at_midnight
  ).includes(:carts).group('?')

在哪里 ?是您要分组的一些属性。您最终会为每个组返回一条记录。

于 2012-04-17T17:07:25.137 回答