【问题标题】:Retrieve the controller name from a class name following RoR conventions按照 RoR 约定从类名中检索控制器名
【发布时间】:2011-07-26 02:26:24
【问题描述】:

我正在使用 Ruby on Rails 3.0.9,我想根据类名构建控制器名称,并尽可能遵循 RoR 命名约定。例如,如果我有 Articles::Comment 类,我想检索 articles/comments 字符串。

也许它存在由开发人员创建的用于在内部处理这些约定的 RoR 方法,但我不知道。

如上例所示,如何检索控制器名称?

【问题讨论】:

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


    【解决方案1】:

    您正在寻找下划线方法。 More info here.

    "Articles::Comment".underscore
    

    或者,如果你有控制器类本身,它会是这样的:

    Articles::Comment.name.underscore
    

    编辑

    对于路由,它们是一次构建的,即使您为它们命名。当你做这样的事情时:

    map.resources :articles do |articles|
      articles.resources :comments
    end
    

    rails 要做的是,首先:

    "articles". classify # which yields "Article" then rails is going to append "Controller" to it
    

    然后它会得到“cmets”并做同样的事情,但是这个将被路由到“/articles”下。 Rails 没有命名内部资源,因此,控制器必须是 CommentsController,而不是 Articles::CommentsController。

    只有当你明确命名某些东西时,Rails 才会为你的类命名:

    map.namespace :admin do |admin|
      admin.resources :articles # will require controller "Admin::ArticlesController"
    end
    

    我希望现在更清楚了。

    【讨论】:

    • 使用您的代码,我还需要调用“pluralize”方法...但是这是 RoR 在内部处理这些命名约定的方式吗?
    • 看来我的问题错了,我没有注意到复数形式,这就是 Rails 为路径生成名称的方式,如articles_comment_path 中,而不是路径。在路线上,每一块都是它自己的名字,这就是类名 tableize'd。
    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 2020-11-14
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多