从类名中检索控制器名称

时间:2011-07-10 18:37:15

标签: ruby-on-rails ruby ruby-on-rails-3 controller

我正在使用Ruby on Rails 3.0.7,我希望在给定类名的情况下检索控制器名称。也就是说,我有

Articles::Category

我想检索

articles/categories

我想在与Articles::Categories控制器无关的视图文件中检索控制器名称。

我该怎么做(可能使用一些Ruby on Rails核心方法)?

5 个答案:

答案 0 :(得分:10)

Articles::Category.name.underscore.pluralize
=> "articles/categories"

正如其他许多人所说,没有特别的方法。但是只要你遵循Rails约定,这种方法就会带你走远。

答案 1 :(得分:4)

要获取控制器名称,请在视图中说明:

<%= controller.controller_name %>

如果您有一个名为user的用户对象,请获取类的名称,例如User;

user.class.to_s 

除此之外,我不认为控制器和模型之间存在关联,它可以从类名称中获取控制器名称,因为它们是不同的东西。您可以创建像{:controller =&gt;这样的哈希值。 'class_name'}并自己绘制。

答案 2 :(得分:1)

Articles::Categories.name.underscore #=> articles/categories

它强调了以下内容:

RailsAdmin::ApplicationHelper.name.underscore #=> rails_admin/application_helper

答案 3 :(得分:0)

假设你的确意味着Articles::CategoriesController,那么Articles::CategoriesController.controller_path会给你你想要的东西。

更新问题是,鉴于Rails模型的名称,您如何获得相关控制器的名称?

这个问题的答案是,你做不到。从型号名称到控制器名称没有一对一的映射。 User模型可以由users_controller.rb和/或admin/users_controller.rb控制,或者根本没有关联的控制器。您当然可以根据Rails惯例猜测一些可能的可能性,但您无法知道。

答案 4 :(得分:0)

而不是underscore.pluralize只使用tableize

ActiveRecord::Base.name.tableize
=> "active_record/bases"