我正在使用ruby on rails创建一个基本博客。我是新手。我有两个名为category和post_controller的控制器。两者都有show功能,如下所示:
用于类别控制器:
Category.find(params[:id])
for post_controller
Post.find(params[:id])
当我输入网址
时"localhost:3000/post_controller/2
显示ID为2的帖子。 但是当我为类别控制器做同样的事情时:
"localhost:3000/categories/2
显示错误
No route matches [GET] "/categories/1"
Rails.root: /home/root/myFirstBlog
是的,当然,我在我的类别数据库中有一个id为2的元素。 但是当我使用这个网址时:
"localhost:3000/categories/show?id=2
它显然有效但两个控制器之间有什么区别,即使它们具有相同的代码。
P.S。我很困惑哪些信息是相关的,所以请在评论中告诉我。我会根据需要编辑我的问题。
Rails.application.routes.draw do
get 'categories/index'
get 'categories'=>'categories#index'
get 'categories/edit'
get 'categories/new'
get 'home/index'
get 'post_controller/edit'
get 'post_controller/index'
get 'categories/edit'
get 'categories/index'
get 'categories/new'
get 'categories/show'
resources :category
resources :post_controller
root 'post_controller#index'
end
答案 0 :(得分:1)
首先:resources :thing
应该是复数
resources :things
添加了这些routes。
因此不需要路由文件中的所有get 'categories/*'
。
我不确定post_controller
是什么。应该重命名为。 resources :posts
这些可能是您看到不一致的原因。如果不深入研究它就很难说到底发生了什么。
您的路线文件应如下所示:
Rails.application.routes.draw do
resources :category # handles actions for all categories CRUD
resources :posts # handles actions for all posts CRUD
root 'post_controller#index' #root view. i.e. "/"
end
答案 1 :(得分:0)
似乎你拼错了URL中的控制器。如果您的控制器是类别localhost:3000 / categories / 2应该工作。