Rails 如何通过类名获得类的命名空间?

jky · 2014年06月18日 · 最后由 hz_qiuyuanxin 回复于 2014年06月18日 · 3229 次阅读

比如我的类 class Admin::In::User end, 我现在得到 User,怎么取得 Admin::In::User,请大神指教。

不是应该直接就返回 Admin::In::User 么?

#1 楼 @kenshin54 假如我传一个 User 参数给我,然后我就能得到 Admin::In::User,我的需求是这样的。

module A
  class B
  end
end

def foo(bar)
  puts bar.class
end

foo A::B.new

# => A::B

#3 楼 @kenshin54 如果现在不知道 A::B,我只得到 B,能通过 B 去获得 A::B 吗?

#4 楼 @jky 不知道我只得到B是什么意思,如果 B 是 class 的话,那B.inspect 就可以了,如果 B 是字符串"B"的话,可以ObjectSpace.each_object(Class) {|klass| p klass if klass.inspect.include? 'B'}

#5 楼 @piecehealth 谢谢了,应该是这个意思

#5 楼 @piecehealth 这个是模糊查询,如果要具体查询怎么弄的,假如 B 的全称是 User,获得 User 后怎么得到完全匹配的 A::User 呢?

#7 楼 @jky klass.inspect.split('::').include? 'B'

#8 楼 @piecehealth 如果 B 是类的话这个不行呢 B.inspec

#8 楼 @piecehealth 我的类在控制台没有结果

试试:Object.const_get 'Admin::In::User'

直接用 singleton_class

module A
  module B
    class C
    end
  end
end

A::B::C.singleton_class # => #<Class:A::B::C>
需要 登录 后方可回复, 如果你还没有账号请 注册新账号