在阵列上运行destroy_all?

时间:2011-09-12 03:35:13

标签: ruby-on-rails postgresql activerecord rails-activerecord

如何在阵列上运行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 个答案:

答案 0 :(得分:26)

您不在数组上执行destroy_alldestroy_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$'))