You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails应用报错:uninitialized constant ArticleController/Articles问题求助

搞定你的Rails路由与控制器错误!

嘿,刚看完你的问题,咱们一步步来解决这些Rails的小坑!首先看你当前的核心错误:uninitialized constant ArticlesController::Articles,这个问题出在模型名单复数写错,再结合你之前的路由调整问题,咱们逐个修复:

1. 先把控制器的命名拉回Rails约定

Rails是出了名的"约定大于配置",控制器的命名规则必须严格遵守:

  • 类名得是复数驼峰式:ArticlesController(不是单数的ArticleController)
  • 文件名得是复数下划线式:articles_controller.rb(放在app/controllers目录下)

你之前的控制器类名写的是单数,这就是一开始出现uninitialized constant ArticleController路由错误的原因,后来改了路由但控制器没对应改对,才引发了更多问题。

2. 修复控制器里的模型调用错误

看错误栈里的代码,你在ArticlesController里写了:

@article = Articles.page(params[:page]).per(25)

这里的Articles是错的!Rails的模型名是单数的(对应数据库表是复数articles),所以必须改成Article(单数),另外变量名用复数@articles会更语义化,毕竟你查的是列表:

修正后的控制器核心代码示例:

class ArticlesController < ApplicationController
  def index
    # 把Articles改成Article,变量名换成@articles更合理
    @articles = Article.page(params[:page]).per(25)
  end

  def update
    @article = Article.find(params[:id])
    if @article.update(params.require(:article).permit(:title, :company, :url))
      redirect_to root_path
    else
      render 'edit'
    end
  end

  # 记得把create、show等其他方法里的Articles也全改成Article哦
end

3. 优化你的路由文件(减少冗余)

你的routes.rb里有一些可以简化的地方,同时确保路由和控制器对应正确:

Rails.application.routes.draw do
  resources :articles, :comments
  root 'articles#index'
  resources :people
  
  # 把重复的sign_in路由合并成一行,更简洁
  match 'entries/sign_in', to: 'entries#sign_in', via: [:get, :post]
  
  # 这里注意:如果你的控制器是AssignmentController,这个路由没问题;如果是Assignment2Controller,要改成assignment2#index
  get 'assignment_2/index' => 'assignment#index'
end

4. 最后别忘了重启服务器!

做完上面的修改后,一定要重启Rails服务器!因为控制器文件名或类名修改后,服务器不会自动加载新的命名,重启后再访问localhost:3000,应该就能正常显示了。

总结一下:你一开始的路由错误是因为控制器命名不符合Rails约定,后来改路由时又不小心把模型名的单复数写错了,导致了新的错误,按照上面的步骤调整后应该就能解决啦!

内容的提问来源于stack exchange,提问作者Markyfor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:02:43