在哈希轨道4中查找数组的模型类

时间:2016-10-23 16:38:25

标签: ruby-on-rails arrays ruby ruby-on-rails-4 hash

我试图找出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

1 个答案:

答案 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