【问题标题】:Routing Error uninitialized constant ArticleController路由错误未初始化常量 ArticleController
【发布时间】:2014-05-17 06:28:37
【问题描述】:

我是 Ruby on rails 的新手。我在 app/controllers/articles_controler.rb 中编写了代码

def create
  @article = Article.new(article_params)

  @article.save
  redirect_to @article
end

private
  def article_params
    params.require(:article).permit(:title, :text)
  end

当我打开 rails 服务器时,我收到了错误,因为路由错误未初始化常量 ArticleController。

在 config/routes.rb 我有以下代码

Rails.application.routes.draw do

  get 'articles/new'

  resources :article 

  root 'welcome#index'
 end 

【问题讨论】:

  • 你的config/routes.rb有什么?
  • 你是class ArticlesController < ApplicationController的控制器吗?
  • 发布您的完整控制器代码。正如@WaliAli 所说,控制器名称应该是复数。
  • 就像我想的那样,你有resources :article。你的控制器的名字是class ArticlesController。对吗?

标签: ruby-on-rails


【解决方案1】:

控制器名称是复数形式

class ArticlesController < ApplicationController #notice, it is Articles

这意味着,在您的 config/routs.rb 中,您需要有一条映射到 articles(复数)的路线。

这肯定意味着,在您的config/routes.rb 中,您有一个resources :article。 所以路由被映射到一个名为Article 的控制器上,而你没有它,而且无论如何这都是不正确的。这就是为什么你得到Routing Error uninitialized constant ArticleController,因为它找不到名为Article(单数)的控制器

应该是resources :articles。这样,它将寻找控制器名称Articles

底线:控制器名称是复数形式。所以检查你的命名。

【讨论】:

  • @VenkateshMandadi,如果它解决了你的问题,你应该接受这个答案。
【解决方案2】:

虽然@Wali Ali 是对的,但还有其他要争的东西

控制器可以是单数 - 约定是控制器名称的复数,但我们对exception 和其他一些名称使用单数。如果您想保持名称单数,您可以这样做:

#config/routes.rb
resources :article # -> although not conventional, it will work

#app/controllers/article_controller.rb
class ArticleController < ApplicationController #-> name reflects route

Singular

您可能想查看的其他内容是singular routing resources。这些工作非常简单:

#config/routes.rb
resource :article

#app/controllers/articles_controller.rb
class ArticlesController < ApplicationController

虽然这是常规的,但这意味着您必须将控制器名称保持为复数形式

这个,再加上@Wali Ali的解释,应该可以帮你解决

【讨论】:

  • 感谢分享奇异资源。学到了新东西。
  • 没问题!可能非常有用:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 2020-11-24
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 2015-05-23
相关资源
最近更新 更多