【问题标题】:Retrieve the controller name from a class name从类名中检索控制器名
【发布时间】:2023-03-17 06:48:01
【问题描述】:

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

Articles::Category

我想找回

articles/categories

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

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

【问题讨论】:

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


    【解决方案1】:
    Articles::Category.name.underscore.pluralize
    => "articles/categories"
    

    正如许多其他人所提到的,没有特殊的方法。但只要您遵循 Rails 约定,这种方法就会让您走得更远。

    【讨论】:

      【解决方案2】:

      要获取控制器名称,在您的视图中说,您可以这样做:

      <%= controller.controller_name %>
      

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

      user.class.to_s 
      

      除此之外,我认为控制器和模型之间没有关联,可以从类名中为您提供控制器名称,因为它们是不同的东西。你也许可以创建一个像 {:controller => 'class_name'} 这样的哈希并自己映射它们。

      【讨论】:

      • 我担心它不能回答问题
      • 但是,我在最后一段中回答 apneadiving :) 我说,据我所知,你不能那样做。
      • Backo,在您的更新中,您说您希望在视图文件中接收控制器名称。您可以使用我回答中的第一个代码 sn-p 来做到这一点。
      • @SpyrosP - 在与“Articles::Categories”控制器无关的视图文件中调用“”方法我将获得当前控制器的控制器名称(即是,而不是 'Articles::Categories' 控制器)。
      • 但是视图绑定到控制器。例如,如果您有一个带有用户视图的用户控制器,则不要从另一个控制器调用该视图,除非它是部分控制器,在这种情况下,您仍将获得当前控制器。
      【解决方案3】:
      Articles::Categories.name.underscore #=> articles/categories
      

      它强调了驼峰式的单词,以便:

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

      【讨论】:

      • 只要您没有偏离 Rails 所依赖的命名约定,这似乎是一种合理的方法。
      • @gunn @jaydel - 我错了。我指的是“Articles::Category”类名,而不是“Articles::Categories”类名!我也更新了问题。
      【解决方案4】:

      假设您的意思是 Articles::CategoriesController,那么 Articles::CategoriesController.controller_path 会给您想要的。

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

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

      【讨论】:

      • @ - 我收到此错误:NoMethodError 'undefined method `controller_path' for #<0x00000106a3cf08>
      【解决方案5】:

      不要使用underscore.pluralize,而是使用tableize

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多