2017-04-21 122 views
0

我想通過連接在我的模型上執行高級Active Record查詢並計算所有記錄。我不知道是否可以做我想做的事,但我認爲可以做到。Rails高級活動記錄查詢

我想知道一個電臺播放單曲的次數。我嘗試了以下,但它顯然沒有工作。

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

我打得四處組以及雖然Generalplaylist模型,但缺點是,它給出了一個哈希作爲一個結果,而不是一個ActiveRecord關係。

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

你分組,計算後一個ActiveRecord關係並不真正適用的模型。

組和計數會給你聚合結果,而ActiveRecord關係實際上是爲你需要對單個記錄進行行級訪問時設計的。

所以在這種情況下,散列是你想要的結果。

+0

嗨約書亞,我已經結束了使用組梅索德和處理組找到歌曲詳情我是尋找。這對我的情況似乎是最好的。感謝您的幫助! – Samuel

0

如果你想要一個ActiveRecord關係(儘管Joshua指出你不需要它),你可以使用Generalplaylist。假設你想在一個特定的無線站my_radiostation你可以算一筆specfic歌曲my_song ...

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

感謝史蒂夫爲你的anwser。我最終使用了組方法,因爲它必須適合我的情況。 – Samuel

+0

沒問題,很高興你有解決方案! – SteveTurczyn