2013-08-19 2 views
0

Я объединил два результата запроса и хотел бы ограничить результаты на основе определенных критериев.Rails Concatenated Query Result «where»

def all_notifications 
    return (user_project_notifications+followed_comments).sort_by(&:created_at).reverse 
end 

Я хотел бы ограничить all_notifications от тех, которые приходят через определенное время, так что-то вроде:

def new_notifications(notifications_last_viewed) 
    return all_notifications.where('created_at >?, notifications_last_viewed) 
end 

Тем не менее, я получаю ошибку неопределенный метод `где» для массива : ...

Как выполнить запрос «где» при конкатенированном результате?

ответ

1

Вы не можете сделать это непосредственно, потому что после того, как вы применить один из типичных Array (или Enumerable) методов (например, «+») на ActiveRecord::Relation, его возвращает Array экземпляр, который не имеет методов ActiveRecord.

Я думаю, вы должны принести свой user_project_notifications и followed_comments в одном запросе с «ИЛИ» - вы затем ActiveRecord::Relation экземпляром, на котором вы можете вызывать методы охвата, как order или where.

+0

ОК, я вижу. теперь, чтобы выяснить, как получить follow_comments из запроса activerecord ... – scientiffic

3

Вы не делаете дб то замените:

(user_project_notifications+followed_comments).sort_by(&:created_at).reverse 

с:

(user_project_notifications + followed_comments).order('created_at DESC') 

Вы будете держать связь вместо того, чтобы массив.

Я думаю, проблема связана с +, где вы суммируете массивы, тогда как вы должны присоединяться к запросам.

Хороший способ сделать это состоит в использовании this gem

+0

У меня было это первоначально, но я получаю ошибку «неопределенный метод» для «Array». Вот почему я закончил использовать отсортированную и обратную. – scientiffic

+0

важно избегать запросов к db, чтобы вы могли связывать запросы. Я думаю, проблема связана с '+', где вы суммируете массивы, тогда как вы должны присоединяться к запросам. хороший способ сделать это - использовать этот драгоценный камень: https://github.com/oelmekki/activerecord_any_of – apneadiving

+0

-1 объяснение? – apneadiving