我想通过连接对我的模型进行高级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
答案 0 :(得分:0)
在您进行分组和计数后,ActiveRecord关系并不真正适用。
组和计数将为您提供汇总结果,而ActiveRecord关系实际上是为您需要对单个记录进行行级访问而设计的。
所以在这种情况下,哈希就是你想要的结果。
答案 1 :(得分:0)
如果你想要一个ActiveRecord关系(尽管Joshua指出你并不真的需要一个),你可以使用Generalplaylist。假设你想在特定的无线电台my_song
计算一首特定歌曲my_radiostation
,你可以做...
Generalplaylist.where(song: my_song, radiostation: my_radiostation).count