【问题标题】:Get full rails controller name, including the namespace获取完整的 rails 控制器名称,包括命名空间
【发布时间】:2011-07-13 12:14:33
【问题描述】:

我在不同的命名空间中有很多控制器。 controller_name 方法只返回控制器的名称,例如'文章'。 有没有机会获得像“服务/文章”这样的全名(文章控制器在服务命名空间中)?

我想通过全局使用的部分创建指向每个控制器的索引操作的链接:

<%= link_to controller.display_name, { :controller => controller.controller_name, :action => "index"} %>

如果此部分呈现在“用户”命名空间中的视图中,我会收到错误消息:用户/文章没有路由(应该是服务/文章)。

【问题讨论】:

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


    【解决方案1】:

    你可以使用嵌套资源,而不是链接到 :controller, :action 语法吗

    routes.rb

    resources :users do
      resources: articles
    end
    

    在你看来

    = link_to 'Articles', user_article_path(current_user)
    

    user_article 将为您处理命名空间。

    【讨论】:

    • 但这要求我需要将每个资源作为嵌套资源添加到所有其他资源中。我需要从用户链接到文章,文章到用户,下载到文章,下载到用户......跨不同的命名空间。嵌套资源似乎不是一个好的解决方案。
    • 另一个问题:partial 被所有视图使用并处理一个ControllerClasses 列表来创建到这些控制器的链接。此时,这里不能写user_article_path(current_user),因为这取决于当前的控制器/视图。
    【解决方案2】:

    【讨论】:

    • 啊,谢谢。使用 %= link_to item.display_name, { :controller => '/' + item.controller_path, :action => "index"} 它可以工作。
    • 在最新版本的 Rails 中,这应该是 controller.controller_path
    • 我从事 Rails 开发已有 10 多年了,今天你教会了我一些新东西!万事皆有法!
    猜你喜欢
    • 2011-09-19
    • 2011-03-24
    • 2014-05-19
    • 2012-07-08
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    相关资源
    最近更新 更多