在每个循环中调用一个数组find_by_email

时间:2013-07-07 15:42:10

标签: arrays ruby-on-rails-3

我正在尝试在控制台中循环访问数组并使用find_by_email找到用户:

a = [ "brian@labyrinth.com",  "lmontoymail@gmail.com"]
a.each do |email|
 u = User.find_by_email("#{a}")
 u.delete
end

但是我收到了一个错误:

NameError: undefined local variable or method `email' for main:Object

在这里,我得到的答案是:

1.9.3p194 :035 > a = [ "brian@labyrinth.com",  "lmontoymail@gmail.com"]
 => ["brian@labyrinth.com", "lmontoymail@gmail.com"] 
1.9.3p194 :036 > a.each do |email|
1.9.3p194 :037 >     u = User.find_by_email(email)
1.9.3p194 :038?>   u.destroy
1.9.3p194 :039?>   end
  User Load (0.7ms)  SELECT "users".* FROM "users" WHERE "users"."email" = 'brian@labyrinth.com' ORDER BY users.created_at DESC LIMIT 1

NoMethodError:nil的未定义方法`destroy':NilClass

1 个答案:

答案 0 :(得分:2)

首先,不要使用#{a}。它引用数组,使用传递给循环的email变量,该变量引用该迭代的电子邮件。

u = User.find_by_email(email)

您收到错误的原因是因为您遗漏了do

a.each do |email|
  u = User.find_by_email(email)
  u.destroy
end

您可以通过编写来优化查询。

User.where(email: a).destroy_all