Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 从类名中检索控制器名_Ruby On Rails_Ruby_Ruby On Rails 3_Controller - Fatal编程技术网

Ruby on rails 从类名中检索控制器名

Ruby on rails 从类名中检索控制器名,ruby-on-rails,ruby,ruby-on-rails-3,controller,Ruby On Rails,Ruby,Ruby On Rails 3,Controller,我使用的是RubyonRails3.0.7,我想检索一个给定类名的控制器名。就是我有 Articles::Category 我想找回 articles/categories 我想在与Articles::Categories控制器无关的视图文件中检索控制器名称 我如何才能做到这一点(可能使用一些RubyonRails核心方法)?要获取控制器名称,可以在视图中执行以下操作: <%= controller.controller_name %> 除此之外,我不认为控制器和模型之间存在关

我使用的是RubyonRails3.0.7,我想检索一个给定类名的控制器名。就是我有

Articles::Category
我想找回

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


我如何才能做到这一点(可能使用一些RubyonRails核心方法)?

要获取控制器名称,可以在视图中执行以下操作:

<%= controller.controller_name %>
除此之外,我不认为控制器和模型之间存在关联,可以从类名中获得控制器名称,因为它们是不同的东西。您可以创建一个类似{:controller=>'class_name'}的散列,并自己映射这些散列

Articles::Categories.name.underscore #=> articles/categories
它强调了camelcased单词,以便:

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

假设您真正的意思是
Articles::CategoriesController
,那么
Articles::CategoriesController.controller\u path
将为您提供所需的内容

更新问题是,给定Rails模型的名称,如何获得关联控制器的名称

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

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

正如许多其他人所提到的,没有专门的方法。但是,只要您遵循Rails惯例,这种方法就会让您走得更远。

而不是
下划线。多值化
只需使用:


我担心它不能回答这个问题,但是,我在最后一段的前言中回答:)我说,据我所知,您不能这样做。Backo,在您的更新中,您说您希望在视图文件中接收控制器名称。您可以使用我回答中的第一个代码段来执行此操作。@SpyrosP-在与“Articles::Categories”控制器不相关的视图文件中调用“”方法我将获得当前控制器(即不是“Articles::Categories”控制器)的控制器名。但是视图与控制器绑定。比如说,如果您有一个带有用户视图的用户控制器,您不会从另一个控制器调用该视图,除非它是部分的,在这种情况下,您仍然可以得到当前的控制器。只要您没有偏离Rails所依赖的命名约定,这似乎是一种合理的方法。@gunn@jaydel-我错了。我指的是'Articles::Category'类名,而不是'Articles::Categories'类名!我也更新了这个问题。@-我得到了这个错误:NoMethodError'undefined method'controller_path'for#'。一定有错误,
controller_path
是在继承自
ActionController::Base
的所有类上定义的。您是否试图获取与模型关联的控制器的控制器路径,即从
ActiveRecord::Base
继承的对象?我有模型名称(Articles::Category),我想检索相关的控制器“name”(Articles/categories)。
Articles::Category.name.underscore.pluralize
=> "articles/categories"
ActiveRecord::Base.name.tableize
=> "active_record/bases"