Я написал пару сложных запросов (по крайней мере, для меня) с интерфейсом запросов Ruby on Rail:
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})
Оба этих запроса прекрасно работают сами по себе. Оба возвращают объекты Post. Я хотел бы объединить эти сообщения в один ActiveRelation. Поскольку в какой-то момент могут быть сотни тысяч сообщений, это необходимо сделать на уровне базы данных. Если бы это был запрос MySQL, я мог бы просто использовать оператор UNION
. Кто-нибудь знает, могу ли я сделать что-то подобное с интерфейсом запросов RoR?
Post.watched_news_posts.watched_topic_posts
. Возможно, вам потребуется отправить параметры в области действия для таких вещей, как:user_id
и:topic
. - person Zabba   schedule 14.07.2011find_by_sql("#{watched_news_posts.to_sql} UNION #{watched_topic_posts.to_sql}")
. Я не проверял это, так что дайте мне знать, как это работает, если вы попробуете. Кроме того, вероятно, есть некоторые функции ARel, которые будут работать. - person Wizard of Ogz   schedule 14.07.2011find_by_sql
нельзя использовать с другими цепными запросами, что означает, что теперь мне также нужно переписать мои фильтры и запросы will_paginate. Почему ActiveRecord не поддерживает операциюunion
? - person LandonSchropp   schedule 15.07.2011