コントローラーに次のクエリがあります。それらを1つにマージできる方法はありますか?
@record_videos = RecordVideo.where("recommand = ?",true).limit(8)
@musics=Music.limit(13)
@new_topics=Topic.limit(5).order("created_at desc")
コントローラーに次のクエリがあります。それらを1つにマージできる方法はありますか?
@record_videos = RecordVideo.where("recommand = ?",true).limit(8)
@musics=Music.limit(13)
@new_topics=Topic.limit(5).order("created_at desc")
いいえ、異なるクラスのオブジェクトを返す複数のクエリを組み合わせることはできません。理論的には、独自のクエリ SQL を作成し、いくつかの を使用した場合は可能UNION
ですが、Rails は結果のデータをどう処理すればよいかわかりません。率直に言って、これが良いアイデアになるユースケースは思い浮かびません。
これで、後でクエリの結果を Ruby コードで簡単に組み合わせることができます。たとえば、それらをまとめて並べ替えたい場合は、次のようにします。
@all_items = [@record_videos.all, @musics.all, @new_topics.all].flatten.sort_by{ |thing| thing.created_at}