如何在下面的筛选器中找到命名空间或模块'Foo‘的名称?
class ApplicationController < ActionController::Base
def get_module_name
@module_name = ???
end
end
class Foo::BarController < ApplicationController
before_filter :get_module_name
end
发布于 2013-01-04 03:20:33
这些解决方案都不考虑具有多个父模块的常量。例如:
A::B::C
从Rails 3.2.x开始,您可以简单地:
"A::B::C".deconstantize #=> "A::B"
从Rails 3.1.x开始,您可以:
constant_name = "A::B::C"
constant_name.gsub( "::#{constant_name.demodulize}", '' )
这是因为#demodulize是#deconstantize的对立面:
"A::B::C".demodulize #=> "C"
如果您确实需要手动执行此操作,请尝试以下操作:
constant_name = "A::B::C"
constant_name.split( '::' )[0,constant_name.split( '::' ).length-1]
发布于 2015-01-09 17:01:38
对于简单的情况,您可以使用:
self.class.parent
发布于 2008-09-25 13:40:09
这应该可以做到:
def get_module_name
@module_name = self.class.to_s.split("::").first
end
https://stackoverflow.com/questions/133357
复制相似问题