在其他方法中访问循环变量

时间:2014-04-10 09:30:47

标签: ruby-on-rails ruby

假设我有以下方法:

def run
  @users.each do |u|
    ..
    ..
  end
end

我在run中有很多代码,所以我试图重构它并将其拆分成更小的方法。其中一种方法如下:

def finish_mutation
  ..
  ..
  Rails.logger.info "Succesfully added #{u.name}"
end

这会中断,因为finish_mutation无法访问u变量。如何创建可以访问我在u中创建的run变量的新方法?

3 个答案:

答案 0 :(得分:4)

您只需创建方法参数:

def finish_mutation(user)
  # code
  Rails.logger.info "Successfully added #{user.name}"
end

并调用它,传递User实例:

finish_mutation(u)

答案 1 :(得分:3)

您可以轻松地在finish_mutation方法中添加一个参数,如下所示:

def finish_mutation(param)
   # .......
end

然后你就像这样调用你的函数:

def run
  @users.each do |u|
    ..
    ..

    finish_mutation(u)  # <----- for example here you call your method

  end
end

答案 2 :(得分:2)

有时传递你的循环变量(如其他答案中所示)是最好的答案。有时候,你可以通过在任何课程中添加一种方法来更好地干燥事情&#39; u&#39;是一个实例。所以你可能会这样做

class User
def finish_mutation
 # put your operation here
end
end 

然后在你的循环中

u.finish_mutation

显然,您需要考虑哪种方法适用于特定情况。