我有一个包含变量的哈希值:
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
如何获取其命名空间?
答案 0 :(得分:4)
我不认为这是可能的。给定诸如'9115'之类的值,除了详尽的搜索之外,没有办法知道对于特定视频已经设置了哪些常数,这种情况只有在总数很少时才有效。
如果您需要了解此信息,我会重新考虑您存储的数据 - CatId键的值可能是其中包含更多信息的内容(例如,包含id和文本描述的结构)
答案 1 :(得分:1)
Categories::Services::PHOTOGRAPHY_VIDEO
只是该类中的常量。它的值与模型没有关系(你称之为命名空间);在这种情况下它只是一个字符串。您可以再次检查哈希值。
def priced?
(hash["CatId"]) == Categories::Services::PHOTOGRAPHY_VIDEO
end
答案 2 :(得分:0)
"#{hash["CatId"]}".include? 'Services::'
更新=>
哦,我现在更明白了
module Categories
module Services
PHOTOGRAPHY_VIDEO = "9115"
end
end
hash = {"CatId" => "Categories::Services::PHOTOGRAPHY_VIDEO"}
eval hash["CatId"] # => "9155"