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

jky · June 18, 2014 · Last by hz_qiuyuanxin replied at June 18, 2014 · 3228 hits

比如我的类 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>
You need to Sign in before reply, if you don't have an account, please Sign up first.