3

我有一个包含变量的哈希值:

module Categories
  module Services
    PHOTOGRAPHY_VIDEO = "9115"
  end
end

hash = {"CatId" => Categories::Services::PHOTOGRAPHY_VIDEO}

puts(hash["CatId"]) # This returns "9115" but how do I get the "Services" category?

我想向Ruby询问'CatId'的变量'value'等于'Services'的命名空间。我想做这样的事情:

def priced?
  (hash["CatId"]).unknown_method == Services
end

如何获取它的命名空间?

4

3 回答 3

4

我不认为这是可能的。给定诸如“9115”之类的值,就无法知道已为特定视频设置了哪些常量(除了详尽的搜索,这只有在总数很小的情况下才实用)。

如果您需要获取此信息,我会重新考虑您存储的数据 - CatId 键的值可能包含更多信息(例如,包含 id 和文本描述的结构)

于 2012-10-17T13:31:26.290 回答
1

Categories::Services::PHOTOGRAPHY_VIDEO是该类中的唯一常量。它的值与模型(你称之为命名空间)无关;在这种情况下,它只是一个字符串。您可以再次检查哈希值。

def priced?
  (hash["CatId"]) == Categories::Services::PHOTOGRAPHY_VIDEO
end
于 2012-10-17T13:31:46.023 回答
0
"#{hash["CatId"]}".include? 'Services::'

更新 =>

哦,我现在更清楚了

module Categories
  module Services
    PHOTOGRAPHY_VIDEO = "9115"
  end
end

hash = {"CatId" => "Categories::Services::PHOTOGRAPHY_VIDEO"}

eval hash["CatId"] # => "9155"
于 2012-10-17T13:35:35.463 回答