我有一个简单的验证类:
class MappingValidator
def validate(mapping)
end
protected
def validate_presence_of_title(mapping)
...
end
def validate_presence_of_key(mapping)
...
end
def validates_class_exists(mapping)
...
end
end
在validate
方法中,我想调用以validate_
开头并传递mapping
作为参数的任何方法。这也需要适用于MappingValidator
的子类,因此如果子类声明以validate_
开头的方法,则在子类实例上调用validate时也会调用它。通话顺序无关紧要。
答案 0 :(得分:3)
应该如此简单:
methods.filter {|m| m.to_s.start_with? 'validate_'}.each {|m| send m, mapping}
答案 1 :(得分:3)
这是怎么回事?
class MappingValidator
def validate(mapping)
self.methods.grep(/^validate_/).each do |m|
send(m,mapping)
end
end
protected
def validate_presence_of_title(mapping)
p "1"
end
def validate_presence_of_key(mapping)
p "2"
end
def validates_class_exists(mapping)
p "3"
end
end
MappingValidator.new.validate("validate_")
# >> "1"
# >> "2"