我试图找出WHICH模型留在数组中,以便我可以使用该模型制作条件语句。
set_hash = {
some_array_one: RedModel.some_scope,
some_array_two: BlueModel.some_scope,
some_array_three: GreenModel.some_scope
}
假设此哈希
some_array_one.count = 0,
some_array_two.count = 5,
some_array_three.count = 0,
然后set_class的答案应该等于:BlueModel
这就是我试图找到答案的方式
set_class = set_hash.reject{|k, v| v.count.zero?}.map{|k, v| v.first.class.name}
然而,我得到的是:
["BlueModel"]
如何对数组中的字符串进行常量化(可能不是正确的术语。) 当我尝试使用constantize时,我收到此错误:
NoMethodError: undefined method `constantize' for ["Item"]:Array
答案 0 :(得分:1)
如何对数组中的字符串进行常量化(可能不正确 术语。)
实际上有一种名为constantize
的方法可以完全像它所听到的那样:
"BlueModel".constantize
#=> BlueModel
实际上,它仅仅是字符串,因为您正在调用v.first.class.name
,删除name
调用,您将获得一个模型。
set_class = set_hash.reject{ |k, v| v.count.zero?}.map{ |k, v| v.first.class.name }.map(&:constatize).first
set_class = set_hash.reject{ |k, v| v.count.zero?}.map{ |k, v| v.first.class }.first