如何通过使用params [:id]使用rails上的ruby中的控制器获取id

时间:2015-07-10 13:22:33

标签: ruby-on-rails ruby-on-rails-4

我正在使用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

2 个答案:

答案 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应该工作。