2015-06-03 5 views
0

У меня есть следующие модели:ActiveRecord запрос для массива массивов

Notification 
    belongs_to :receiver, class_name: 'User' 
    # has a sent_email boolean column default set to false 

User 
    has_many :received_notifications, class_name: 'Notification', foreign_key: 'receiver_id', inverse_of: :receiver 
    has_one :alert 

Alert 
    belongs_to :user 
    # has a frequency integer column 

Я хочу, чтобы захватить все уведомления, где sent_email ложно для всех пользователей, которые устанавливают их предупреждения частоты 1, и я хочу return result будет примерно таким:

[ 
     {user object => [<all of the notifications for user 1>]}, 
     {user object => [<all of the notifications for user 2>]}  
    ] 

Я хочу, чтобы это было не более 1 или 2 запросов.

Как выглядит запрос activerecord?

ответ

2

Вы можете использовать includes.

u = User.includes(:received_notifications, :alert) 
     .where("alerts.frequency_discussion_alerts = ? AND notifications.sent_email = ?", 1, false) 
     .references(:notifications,:alerts) 

Теперь в пакетном режиме вы можете получать пользователей и выполнять свою работу.

u.find_each { |u| u.received_notifications } 
+0

Спасибо @R_O_R, но он возвращает все записи в одном массиве. Есть ли способ получить все уведомления для каждого конкретного reciever_id в своем собственном массиве внутри массива? –

+0

@PavanKatepalli Да .. назовите карту и постройте хэш. –

+0

@PavanKatepalli, какой у вас клиент db? Postgresql? –

Смежные вопросы