【问题标题】:Running destroy_all on an array?在数组上运行destroy_all?
【发布时间】:2011-09-12 03:35:13
【问题描述】:
如何在数组上运行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。
【问题讨论】:
标签:
ruby-on-rails
postgresql
activerecord
rails-activerecord
【解决方案1】:
您不会在数组上执行 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$'))