当我尝试加载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
为什么我收到此错误消息,如何才能加载视图?
谢谢。
答案 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)
),并为您定义index
,create
等路线正确。 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