假設我在Album
和Song
類別之間具有一對多關係。我想對相冊做一些複雜的過濾並檢索相應的歌曲。加入ActiveRecord中的表格和過濾表格
讓我們假設一個相當簡單的方式來篩選專輯
filtered_albums = Album.where('released_on >= ?', from)
.where('rating > ?', rating)
.where(genre: genres)
現在,找回我目前使用
Song.where(album_id: filtered_albums.pluck_id)
產生像
SELECT *
FROM songs
WHERE album_id IN (1, 5, 34, 92, ..., 2392);
查詢歌曲由於需要兩個查詢(一個提取專輯id,另一個提取歌曲),這可能是ver y效率低下。
ActiveRecord允許連接表,例如, Songs.joins(:albums)
,但我還沒有找到方法來做類似Songs.joins(filtered_albums)
的事情。沒有任何其他方式可以在沒有首先「擷取」id的情況下進行連接?
Thanks @Manoj。這工作。我想保留專輯過濾到自己的課堂。請參閱我對上述帖子的評論。 – sakovias
我編輯了我的答案以符合您的要求:) –
您已經度過了我的一天,謝謝!合併方法正是我所期待的:)實際上,它是根據[this]使用最少的ActiveRecord :: Relation方法之一(http://blog.mitchcrowe.com/blog/2012/04/14/ 10-most-underused-activerecord-relation-methods /)post! – sakovias