【问题标题】:find model class of array in hash rails 4在哈希轨 4 中查找数组的模型类
【发布时间】:2017-03-05 10:50:09
【问题描述】:

我试图找出数组中留下了哪个模型,以便我可以使用该模型进行条件语句。

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 是的,但它给了我这个 NoMethodError: undefined method `constantize' for ["Item"]:Array
    • @NothingToSeeHere 添加set_class.map(&:constantize).firstset_class.first.constantize
    • @NothingToSeeHere 我添加了一些选项,我肯定会选择最新的
    • @NothingToSeeHere 我不明白什么不让你打电话给kind_of?
    • @NothingToSeeHere set_class == BlueModel => true,但 set_class is_a Class。所以你应该使用set_class == BlueModel
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    相关资源
    最近更新 更多