gpt4 book ai didi

ruby - 在字符串和类名之间转换

转载 作者:太空宇宙 更新时间:2023-11-03 17:19:29 24 4
gpt4 key购买 nike

我有一个字符串,其中包含一个类名。例如,它是一个包含“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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com