Найти записи с отсутствующими связанными записями в Rails - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть устаревшая база данных, где у меня есть две модели:

class Purchase
  belongs_to :product
end

class Product
  has_many :purchases
end

Теперь со временем некоторые из products были удалены, хотя связанные purchases все еще существуют в базе данных. Есть ли способ получить список всех Purchases, для которых связанные products были удалены из консоли rails?

Моя purchase ссылка на таблицу product и столбец product_id

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018
Purchase.left_outer_joins(:product).where(products: {id: nil})

Примечание рельсы 5 имеют left_outer_joins

так что здесь в основном это приведут все покупки, у которых нет ассоциированного продукта.

0 голосов
/ 27 апреля 2018

Почему бы вам не аннулировать покупки при удалении продукта?

class Product
  has_many :purchases, :dependent => :nullify
end

Таким образом, все, что вам нужно сделать, это запросить покупки, где product_id равен нулю. Надеюсь, это поможет!

EDIT: Если вы используете этот подход сейчас, чтобы обновить старые записи и сделать их согласованными, вы должны сделать что-то вроде этого:

Purchase.where.not(product_id: Product.select(:id).distinct).update_all(product_id: nil)

Так вот так теперь должно работать

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