用'id'=找不到Wiki

时间:2016-04-27 19:44:17

标签: ruby-on-rails

当我尝试加载show视图,显示已创建的“wiki”时,收到错误消息Couldn't find Wiki with 'id'=

它特别指向Controller中的第二行:

def show
  @wiki = Wiki.find(params[:id]) ## shows the error in this line
end
def index
  @wikis = Wiki.all
end

以下是我的观点:

<h1><%= @wiki.title %></h1>
<h3><%= @wiki.body %></h3>

以下是我的路线:

Rails.application.routes.draw do
  get 'wikis/index'
  get 'wikis/show'
  get 'wikis/new'
  get 'wikis/edit'
  get 'wikis/create'
  devise_for :users
  get 'welcome/index'
  root 'welcome#index'
end

为什么我收到此错误消息,如何才能加载视图?

谢谢。

4 个答案:

答案 0 :(得分:1)

没有:id param,除非你根据你的路线设置方式明确地传递它。也就是说,您必须转到/wikis?id=<some id>,这可能不是您想要的。考虑更标准的资源丰富的路由设置:

Rails.application.routes.draw do
  resources :wikis
  devise_for :users
  get 'welcome/index'
  root 'welcome#index'
end

可让您转到展示路线的/wikis/<id>(即控制器中的wiki_path(@wiki)),并为您定义indexcreate等路线正确。 http://guides.rubyonrails.org/routing.html

答案 1 :(得分:1)

您有此错误,因为您没有将wiki的ID传递到您的show链接,因此最简单的解决方案是提供ID:

<%= link_to wiki.title, wikis_show_path(id: wiki) %>

但说实话,使用这些自定义路由到wikis控制器,你的代码看起来非常难看,只需简单地替换:

resources :wikis
在您的routes.rb中

。这样,链接到单个wiki显示页面也更简单:

<%= link_to wiki.title, wiki %>

您可能需要阅读Rails routing guide

答案 2 :(得分:0)

您的params[:id]很可能是nil,除非您像/wikis/show?id=123一样传递,因为路由get 'wikis/show'没有任何参数。

最常见的方法是resources :wikis/wikis/123

等路线

答案 3 :(得分:0)

在路线中添加此行

resources :wikis

并删除此代码:

get 'wikis/index' get 'wikis/show' get 'wikis/new' get 'wikis/edit' get 'wikis/create'

现在你可以用url:websitename.com/wikis写索引,websitename.com / wikis / id,websitename.com / wikis / id / edit来编辑......并获得你的身份参数...

详细了解此链接中的资源:Resources Link