Ich habe einige komplexe Abfragen (zumindest für mich) mit der Abfrageoberfläche von Ruby on Rail geschrieben:
watched_news_posts = Post.joins(:news => :watched).where(:watched => {:user_id => id})
watched_topic_posts = Post.joins(:post_topic_relationships => {:topic => :watched}).where(:watched => {:user_id => id})
Beide Abfragen funktionieren für sich. Beide geben Post-Objekte zurück. Ich möchte diese Beiträge in einer einzigen ActiveRelation kombinieren. Da es irgendwann Hunderttausende von Posts geben kann, muss dies auf Datenbankebene erfolgen. Wenn es eine MySQL-Abfrage wäre, könnte ich einfach den UNION
Operator verwenden. Weiß jemand, ob ich mit der Abfrageschnittstelle von RoR etwas Ähnliches tun kann?
find_by_sql("#{watched_news_posts.to_sql} UNION #{watched_topic_posts.to_sql}")
. Ich habe das noch nicht getestet. Lassen Sie mich wissen, wie es geht, wenn Sie es versuchen. Außerdem gibt es wahrscheinlich einige ARel-Funktionen, die funktionieren würden.
find_by_sql
nicht mit anderen verkettbaren Abfragen verwendet werden, was bedeutet, dass ich jetzt auch meine will_paginate-Filter und Abfragen neu schreiben muss. Warum unterstützt ActiveRecord eine union
Operation nicht?
Post.watched_news_posts.watched_topic_posts
. Möglicherweise müssen Sie Parameter für Dinge wie:user_id
und an die Bereiche senden:topic
.