我有一个字符串,其中包含一个类名。例如,它是一个包含“Article”的字符串。该字符串来自 params[]。我应该如何处理这个字符串,就好像它是一个类名一样?例如,我想做:
Article.all
等等。
有什么想法吗?
最佳答案
此解决方案优于 eval,因为您正在评估可能被用户操纵并可能包含有害操作的 params 哈希。作为一般规则:永远不要直接评估用户输入,这是一个很大的安全漏洞。
# Monkey patch for String class
class String
def to_class
klass = Kernel.const_get(self)
klass.is_a?(Class) ? klass : nil
rescue NameError
nil
end
end
# Examples
"Fixnum".to_class #=> Fixnum
"Something".to_class #=> nil
更新 - 一个适用于命名空间的更好版本:
# Monkey patch for String class
class String
def to_class
chain = self.split "::"
klass = Kernel
chain.each do |klass_string|
klass = klass.const_get klass_string
end
klass.is_a?(Class) ? klass : nil
rescue NameError
nil
end
end
关于ruby - 在字符串和类名之间转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1448293/