Результат с пустыми значениями добавляется к моим результатам запроса - PullRequest
1 голос
/ 25 мая 2020

У меня есть модель «Счет-фактура» и «Заказ» со следующей взаимосвязью:

class Invoice < ApplicationRecord
  has_many orders
end

class Order < ApplicationRecord
  belongs_to invoice
end

В моей модели «Счет-фактура» я пытаюсь oop выполнить *1018* заказов, принадлежащих счету-фактуре, используя сбор. К моим результатам добавляется дополнительный порядок с атрибутами nil.

 orders.collect{|order| order}

Результаты:

[#<Order id: 1, menu_item_id: 1, invoice_id: 1, quantity: 1, status: "Submitted", created_at: "2020-05-25 15:48:25", updated_at: "2020-05-25 15:48:25">,
#<Order id: nil, menu_item_id: nil, invoice_id: 1, quantity: nil, status: nil, created_at: nil, updated_at: nil>]

Я проверил наличие этого пустого элемента в базе данных, но не вижу что угодно.

Изменить: Исправлено удалением ненужного instance.order.build в моем контроллере. Спасибо @ 3limin4t0r за это

1 Ответ

1 голос
/ 25 мая 2020

Вещи не появляются волшебным образом. Если в вашей коллекции orders есть пустая запись, вы, вероятно, добавили ее где-то в коллекцию.

Например:

invoice.orders.build
invoice.orders.new
invoice.orders << Order.new

Все добавить пустой заказ в заказы коллекция. Эти действия обычно находятся внутри действий контроллера new и create, но могут также появляться и в других местах.

После загрузки такой коллекции, как invoice.orders, она будет оставаться загруженной на время выполнения запроса (пока invoices находится в области видимости, и вы работаете над тем же экземпляром invoice).

Лучше всего посмотреть, где вы добавили этот дополнительный экземпляр в коллекцию, и удалить заявление, если возможно. В качестве альтернативы вы можете перезагрузить коллекцию из базы данных с помощью invoice.orders.reload сброса коллекции orders.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...