Ruby on rails 不能';找不到带有';id'=

Ruby on rails 不能';找不到带有';id'=,ruby-on-rails,Ruby On Rails,当我尝试加载show视图,显示已创建的“wiki”时,我收到错误消息找不到具有“id”的wiki= 它特别指向控制器中的第二行: 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><%=

当我尝试加载
show
视图,显示已创建的“wiki”时,我收到错误消息
找不到具有“id”的wiki=

它特别指向控制器中的第二行:

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>
为什么我会收到此错误消息,如何才能获得要加载的视图


谢谢。

没有:id参数,除非您根据路由设置明确传递它。也就是说,您必须转到
/wikis?id=
,这可能不是您想要的。考虑一个更标准的资源路由设置:

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

它允许您转到显示路由的
/wikis/
(即控制器中的
wiki\u路径(@wiki)
),并为您正确定义
索引
创建
等路由

您的
参数[:id]
很可能是
nil
,除非您像
/wikis/show?id=123
那样传递它,因为路由
获取“wikis/show”
没有任何参数


最常见的方法是使用
资源:wiki
和类似
/wikis/123
的路由,因为您没有将
wiki
的id传递到show链接中,所以最简单的解决方案是提供id:

<%= link_to wiki.title, wikis_show_path(id: wiki) %>
在您的routes.rb中。这样,链接到单个
wiki
show页面也更简单:

<%= link_to wiki.title, wiki %>


您可能需要阅读。

在您的路线中添加此行

resources:wiki

并删除此代码:

get'wiki/index'
获取“Wiki/show”
获取“Wiki/new”
获取“维基/编辑”
获取“wiki/create”

现在您可以在url中写入:websitename.com/wikis到索引,websitename.com/wikis/id,websitename.com/wikis/id/edit到编辑。。。并获取您的身份证参数


阅读此链接中有关资源的更多信息:

您尝试获取的url是什么?你们的路线是什么?服务器日志是什么?参数中是否有任何值传递请参见rails控制台在主要问题中添加了路由。谢谢你指出这一点。@pitabasprathal,是的,当我检查rails控制台时,它们有一个id、标题和正文。为什么不使用
参考资料:wiki
,而不是单独定义每条路线?顺便说一句,
create
操作可通过
get
?这很糟糕。我将路由更改为上面的示例,但仍然收到相同的错误消息。@sergio相应地更改链接。顺便问一下,既然您没有将
wiki
id传递到任何地方的链接,您希望它如何工作?您是否将
wiki\u show\u路径更改为
wiki\u路径(@wiki)
?url帮助器需要知道链接到哪个wiki对象。因此,我如上图所示更改了路由,但现在这样做时,索引视图不会显示,而是显示“显示”视图。我强烈建议留出一些时间阅读Rails路由指南。另外,在您的控制台中键入
rake routes
,它将显示一个路由列表:控制器操作和命中这些路由的相应URL。
resources :wikis
<%= link_to wiki.title, wiki %>