SQL-запрос Mysql to Rails - PullRequest
       2

SQL-запрос Mysql to Rails

2 голосов
/ 13 января 2012

Как мне воссоздать следующий запрос в языке Rails, чтобы он возвращал количество обработанных строк?

self.connection.execute('DELETE FROM `cd_artist`
LEFT JOIN `cdpedia` ON cd_artist.id = cdpedia.`artistId`
WHERE artistId IS NULL;')

Я понимаю, что я должен использовать что-то вроде Artist.find_by_sql, чтобы оно возвращало что-то, но это дает мне ошибку.

Возможно, есть более элегантный способ сделать это?

Я хочу избежать того, чтобы Rails сначала проводил поиск в базе данных, затем захватывал идентификаторы и удалял записи с помощью Object.destroy или даже Object.delete(id), поскольку вызов SQL намного быстрее (если у вас правильные индексы), но мне любопытно, что такое «правильный» способ сделать это.

1 Ответ

3 голосов
/ 13 января 2012

Вам просто нужно заменить execute на delete , и он вернет количество затронутых строк.

self.connection.delete('DELETE FROM `cd_artist`
LEFT JOIN `cdpedia` ON cd_artist.id = cdpedia.`artistId`
WHERE artistId IS NULL;')

Возможно, есть более элегантный способ сделать это с ActiveRecord, но я сомневаюсь, что он будет таким же эффективным, как необработанный SQL-запрос.

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