首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Ruby on Rails中以编程方式找到命名空间/模块名称?

如何在Ruby on Rails中以编程方式找到命名空间/模块名称?
EN

Stack Overflow用户
提问于 2008-09-25 13:34:38
回答 9查看 53.5K关注 0票数 62

如何在下面的筛选器中找到命名空间或模块'Foo‘的名称?

代码语言:javascript
复制
class ApplicationController < ActionController::Base
  def get_module_name
    @module_name = ???
  end
end


class Foo::BarController < ApplicationController
  before_filter :get_module_name
end
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-01-04 03:20:33

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

代码语言:javascript
复制
A::B::C

从Rails 3.2.x开始,您可以简单地:

代码语言:javascript
复制
"A::B::C".deconstantize #=> "A::B"

从Rails 3.1.x开始,您可以:

代码语言:javascript
复制
constant_name = "A::B::C"
constant_name.gsub( "::#{constant_name.demodulize}", '' )

这是因为#demodulize是#deconstantize的对立面:

代码语言:javascript
复制
"A::B::C".demodulize #=> "C"

如果您确实需要手动执行此操作,请尝试以下操作:

代码语言:javascript
复制
constant_name = "A::B::C"
constant_name.split( '::' )[0,constant_name.split( '::' ).length-1]
票数 103
EN

Stack Overflow用户

发布于 2015-01-09 17:01:38

对于简单的情况,您可以使用:

代码语言:javascript
复制
self.class.parent
票数 31
EN

Stack Overflow用户

发布于 2008-09-25 13:40:09

这应该可以做到:

代码语言:javascript
复制
  def get_module_name
    @module_name = self.class.to_s.split("::").first
  end
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/133357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档