假设我有以下方法:
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
变量的新方法?
答案 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
显然,您需要考虑哪种方法适用于特定情况。