2016-02-11 5 views
0

В моем контроллере клиента у меня есть две коллекций следующим образом:Rails: Как объединить или объединить две активные коллекции записей?

Первая, чтобы получить коллекцию клиентов, где столбец ExpiryDate является имеющими действительной датой, следующим образом:

@customer_with_expirydate = Customer.where.not(expiryDate: nil) 

Вторым чтобы получить коллекцию клиентов, где столбец ExpiryDate равен нулю или Nnot присутствует, а именно:

@customer_no_expirydate = Customer.where(expiryDate: nil) 

Теперь я хочу, чтобы отобразить комбинированный результат этих двух коллекций в структуру таблицы, здесь один кон так как после перечисления всех клиентов с expiryDate должны быть указаны только клиенты без истечения срока действия.

мне нужно что-то вроде следующего:

@all_customers = @customer_with_expirydate + @customer_no_expirydate

Важно то, что клиенты без срока должны быть приложены в прошлом.

+1

Я не могу вспомнить, как он будет работать, а не делать два запроса, просто сделайте одно и закажите по дате истечения срока действия. '@all_customers = Customer.order (expiry_date:: desc)' может потребоваться восхождение для тех, у кого нет даты истечения срока действия. –

ответ

2

@Praveen Ответа вам уже дали:

@all_customers = @customer_with_expirydate + @customer_no_expirydate 

Возвращает Все клиенты, которые имеют срок действия, а затем клиенты, которые не имеют срока годности.

аналогично:

@all_customers = @customer_no_expirydate + @customer_with_expirydate 

Возвращение Всех клиенты, которые не имеют срока годности, а затем клиенты, которые имеют срок годности.

Then you can loop @all_customers inside the table. 

И если вы можете использовать только один запрос для этого, то вы должны использовать:

@all_customers = Customer.order(expiryDate: :desc) 
+0

спасибо за поддержку, позвольте мне попробовать это :) –

3

Как сделать что-то простое с помощью одного запроса? Что-то вроде:

@all_customers = Customer.order(expiryDate: :desc) 
+0

спасибо за поддержку, позвольте мне попробовать это :) –

2

Пусть сортировки клиентов по БД запрос, является более эффективным, чем использование массива, добавить свои:

@ordered_customers = Customer.order('expiryDate DESC NULLS LAST') 

Таким образом, заказчик с expiryDate = nil будет в конце вашего результата!

+0

Спасибо, парень, дайте мне попробовать этот :) –

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