如何在RubyonRails中以编程方式找到名称空间/模块名称?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

如何在下面的过滤器中找到名称空间或模块‘foo’的名称?

class ApplicationController < ActionController::Base
  def get_module_name
    @module_name = ???
  end
end


class Foo::BarController < ApplicationController
  before_filter :get_module_name
end
提问于
用户回答回答于

这些解决方案都没有考虑多个父模块的常量。例如:

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]
用户回答回答于

这应该可以做到:

  def get_module_name
    @module_name = self.class.to_s.split("::").first
  end

扫码关注云+社区

领取腾讯云代金券