2015-07-10 54 views
0

导轨上的红宝石控制器获得ID我正在使用ruby on rails创建基本博客。我对它很陌生。我有两个名为category和post_controller的控制器。两者都有如图所示的显示功能:如何使用params [:id]

的类别控制器:

Category.find(params[:id]) 

为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 

而且是ofcourse,我有一个元素在我的类别数据库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 
+1

你能过去你的路由文件。 –

+0

@AnantKolvankar我做到了。请检查一下。 –

+0

可能是你没有id = 1的类别在第一位。尝试使用id 2而不是1 – uday

回答

1

第一:resources :thing应pluralised

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 
+0

我想通了。不管怎么说,多谢拉! :) –

0

看起来你拼错了URL中的控制器。如果您的控制器是类别localhost:3000/categories/2应该工作。