如何在下面的过滤器中找到名称空间或模块"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开始.你可以简单地:

"A::B::C".deconstantize #=> "A::B"

从Rails 3.1开始.你可以:

constant_name = "A::B::C"
constant_name.gsub( "::#{constant_name.demodulize}", '' )

这是因为#解调是#解构的对立面:

"A::B::C".demodulize #=> "C"

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

constant_name = "A::B::C"
constant_name.split( '::' )[0,constant_name.split( '::' ).length-1]

Ruby-on-rails相关问答推荐

这种使用on:的语法在 Ruby on Rails 中意味着什么?

ArgumentError 用于 Ruby on Rails 中非常简单的初始化方法,没有参数

别名可能与不同模型的相同别名有许多关联?

无效的单表继承类型:Rails

我真正运行的是哪个 Ruby 版本?

Rails - 如何从 http://example.com 重定向到 https://www.example.com

Ruby/Rails 中的类方法与常量

twitter bootstrap下拉突然不起作用

水豚 click_link 与 :href 匹配

没有要加载的文件 - readline

DateTime.now 还是 Time.now?

在 Rails 中将表格行变成链接

在 rake 任务期间关闭观察者的简单方法?

关于在不适合任何地方的 Rails 应用程序中放置类的指南

Rails:将所有未知路由重定向到 root_url

Rails Rake 任务 - 访问模型类

如何一次显示一条 Ruby on Rails 表单验证错误消息?

您如何访问设计控制器?

用于在多行上链接调用的 Ruby 约定

如何在 Rails 4 中测试控制器关注点