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
相关产品推荐
相关产品推荐

