Запуск destroy_all для массива? - PullRequest
10 голосов
/ 12 сентября 2011

Как мне запустить destroy_all в массиве?

У меня следующий запрос:

spam_users = User.find_by_sql("SELECT * FROM users WHERE email ~* '21cn.com'")

Я пытался запустить spam_users.destroy_all, но я получаю undefined method 'destroy_all' for #<Array:0x10b09ce30>.

Я запускаю Rails 2.3.8 в этом конкретном приложении вместе с PostgreSQL.

1 Ответ

26 голосов
/ 12 сентября 2011

Вы не выполняете destroy_all для массива, destroy_all - это метод класса в ваших моделях.Следующее должно уничтожить все, что будет в вашем spam_users массиве:

User.destroy_all("email ~* '21cn.com'")

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

spam_users.each(&:destroy)

Возможно, вы также захотите немного изменить свое регулярное выражение:

User.destroy_all("email ~* '21cn\\.com$'")

, чтобы вы искали литерал ., а не «любой символ», и привязали его кконец строки.Вы также можете использовать строку %q(...) в кавычках, чтобы уменьшить экранирование:

User.destroy_all(%q(email ~* '21cn\.com$'))
...