Rails提供了String#demodulize
来将命名空间从模块中剥离:
'::Pos::EmailNotice'.demodulize #=> "EmailNotice"
'Pos::EmailNotice'.demodulize #=> "EmailNotice"
'::Pos::CallNotice'.demodulize #=> "CallNotice"
'Pos::CallNotice'.demodulize #=> "CallNotice"
你可以把它和delete_suffix!
一起使用.
string = '::Pos::EmailNotice'
string.demodulize.delete_suffix!('Notice')
#=> "Email"
另一种方法是将字符串转换为实际的类,并使其实现您可以调用的type
方法,例如:
module Pos
class EmailNotice
def self.type
:email
end
end
end
然后,您可以使用Rails的String#constantize
:
'::Pos::EmailNotice'.contantize.type #=> :email
'Pos::EmailNotice'.contantize.type #=> :email
或者使用纯Ruby Via Module#const_get
:
Object.const_get('::Pos::EmailNotice').type #=> :email
Object.const_get('Pos::EmailNotice').type #=> :email