Rail 4: Как удалить_ весь запрос с результатом объединения - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь удалить все результаты запроса с объединением двух таблиц, например:

availabilitiesToDelete = Mmk::Availability.find_by_sql(["SELECT a.id
                                              FROM mmk_availabilities a, mmk_resources r 
                                              WHERE a.resource_id = r.id
                                              AND r.company_id = ?", mmkCompany.id])              
              availabilitiesToDelete.delete_all

но я получаю ошибку

NoMethodError (undefined method `delete_all' for #<Array:0x007fa657f2a4e0>)

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Как Рэй уже указал в своем ответе, find_by_sql вернет Array, на который вы поэтому не можете позвонить delete_all.

Однако вы можете использовать второй запрос, чтобы удалить все записи сразу, не вызывая запрос n + q, подобный этому:

Mmk::Availability.where(id: availabilitiesToDelete.map(&:id)).delete_all
0 голосов
/ 05 января 2019

find_by_sql в rails-4 возвращает Array объект, а не ActiveRecord::Relation объект. delete_all - это запрос AR, который выдаст ошибку в вашем случае.

Возможно, вы можете продолжить, как,

availabilitiesToDelete.each(&:delete)
...