Rails高级Active Record查询

时间:2017-04-21 20:31:05

标签: ruby-on-rails ruby rails-activerecord

我想通过连接对我的模型进行高级Active Record查询并计算所有记录。我不知道是否有可能做我想做的事,但我认为可以做到。

我想知道在一台广播电台播放一首歌的次数。我试过以下但显然没有用。

@top_songs = Song.joins(:radiostation).where("radiostations.id = ?", 1).order(total_counter: :desc)

尽管是Generalplaylist模型,我也和group一起玩,但缺点是它给出了一个hash作为结果而不是ActiveRecord Relation。

Generalplaylist.where("radiostation_id = ?", 1).group(:song_id).count

还有其他方法可以获得结果吗?

这是我的电台播放列表网站的模型

generalplaylist.rb

class Generalplaylist < ActiveRecord::Base
  belongs_to :song
  belongs_to :radiostation
  belongs_to :artist
end

song.rb

class Song < ActiveRecord::Base
  has_many :generalplaylists
  has_many :radiostations, through: :generalplaylists
  belongs_to :artist
end

radiostaion.rb

class Radiostation < ActiveRecord::Base
  has_many :generalplaylists
end

class Artist < ActiveRecord::Base
  has_many :generalplaylists
  has_many :songs
  has_many :radiostations, through: :generalplaylists
end

2 个答案:

答案 0 :(得分:0)

在您进行分组和计数后,ActiveRecord关系并不真正适用。

组和计数将为您提供汇总结果,而ActiveRecord关系实际上是为您需要对单个记录进行行级访问而设计的。

所以在这种情况下,哈希就是你想要的结果。

答案 1 :(得分:0)

如果你想要一个ActiveRecord关系(尽管Joshua指出你并不真的需要一个),你可以使用Generalplaylist。假设你想在特定的无线电台my_song计算一首特定歌曲my_radiostation,你可以做...

Generalplaylist.where(song: my_song, radiostation: my_radiostation).count