在阵列上运行destroy_all?

Shp*_*ord 10 postgresql activerecord ruby-on-rails rails-activerecord

我怎样才能destroy_all在阵列上运行?

我有以下查询:

spam_users = User.find_by_sql("SELECT * FROM users WHERE email ~* '21cn.com'")
Run Code Online (Sandbox Code Playgroud)

我试过跑spam_users.destroy_all但是得到了undefined method 'destroy_all' for #<Array:0x10b09ce30>.

我在这个特定的应用程序中运行Rails 2.3.8以及PostgreSQL.

mu *_*ort 27

您不在destroy_all数组上执行,destroy_all是模型上的类方法.以下应该杀死你的spam_users数组中的所有内容:

User.destroy_all("email ~* '21cn.com'")
Run Code Online (Sandbox Code Playgroud)

spam_users如果你已经将它们用于其他目的,你也可以逐个迭代并销毁它们:

spam_users.each(&:destroy)
Run Code Online (Sandbox Code Playgroud)

您可能还想稍微调整一下正则表达式:

User.destroy_all("email ~* '21cn\\.com$'")
Run Code Online (Sandbox Code Playgroud)

这样你就可以找到一个文字.而不是"任何字符"并将其锚定到字符串的末尾.您还可以使用带%q(...)引号的字符串来减少转义:

User.destroy_all(%q(email ~* '21cn\.com$'))
Run Code Online (Sandbox Code Playgroud)