【问题标题】:Routing for controllers with multiple words in in Rails 4Rails 4中具有多个单词的控制器的路由
【发布时间】:2013-11-05 14:27:43
【问题描述】:

我刚刚升级到 Rails 4,发现路由出现意外行为。

我们有一个名为 EmailPreviewController 的控制器。路由是:

get "/emailpreview", controller: 'EmailPreview', action: :index

但是升级到 Rails 4 后,在加载环境时会引发以下错误:

'EmailPreview' is not a supported controller name. This can lead to potential routing problems. See http://guides.rubyonrails.org/routing.html#specifying-a-controller-to-use

我查看了the page,它建议但是没有任何迹象表明使用具有 CamelCase 名称的控制器是不正确的。

如果我将控制器更改为小写,则没有任何问题:

# this works fine
get "/emailpreview", controller: 'emailpreview', action: :index

这是预期的行为吗?现在不能使用驼峰控制器名称还是这里发生了其他事情?

【问题讨论】:

    标签: routing ruby-on-rails-4


    【解决方案1】:

    这个问题的答案有点违反直觉。我认为它是按设计的,但这不是我所期望的。

    在 Rails 3 中,您可以使用对象名称指定控制器

    在 Rails 3 中,您可以传递控制器对象的名称,Rails 会找到它的方式:

    get "emailpreview", controller: 'EmailPreview', action: :index
    

    会找到包含在email_preview.rb 中的EmailPreviewController

    但是在 Rails 4 中,您需要在蛇形情况下传递控制器名称

    在 Rails 4 中,您似乎需要在蛇形案例中传递控制器对象的名称:

    get "emailpreview", controller: 'email_preview', action: :index
    

    这将到达email_preview.rb 中包含的EmailPreviewController

    另请参阅http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing(尽管在此特定情况下这并不能解释太多)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-07
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2013-07-24
      • 2017-04-01
      相关资源
      最近更新 更多