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 UNIONOperator 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_sqlnicht 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 unionOperation nicht?
Post.watched_news_posts.watched_topic_posts. Möglicherweise müssen Sie Parameter für Dinge wie:user_idund an die Bereiche senden:topic.