我想创建一个 Test::Unit test_helper 方法,我可以在测试执行后调用它来删除一堆表。这是我的总体想法:
def self.wipe_models(*models)
def teardown
models.each do |model|
model = model.to_s.camelize.constantize
model.connection.execute "delete from #{model.table_name}"
end
end
end
但是,当 teardown
运行时,我得到:
undefined local variable or method `models'
在我看来,“def” block 似乎不遵守通常的闭包规则;我无法访问在其范围之外定义的变量。
那么,如何访问在“def”方法声明之外定义的变量?
最佳答案
您可以使用 define_method
将其作为闭包来完成:
def self.wipe_models(*models)
define_method(:teardown) do
models.each do |model|
model = model.to_s.camelize.constantize
model.connection.execute "delete from #{model.table_name}"
end
end
end
现在方法体是一个 block ,可以访问models
。
关于ruby - 在 Ruby 中定义使用范围外变量的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5938931/