2016-04-27 61 views
-2

当我尝试加载show视图,显示一个“维基”已创建,我得到错误信息Couldn't find Wiki with 'id'=无法与“ID”找到维基=

它具体指向第二行中控制器:

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

你试图得到什么网址?你的路线是什么?什么是服务器日志? –

+0

是否有任何价值传递参数看你的滑轨控制台 –

+0

只需将路线添加到主要问题。感谢您指出了这一点。 – sergio

回答

1

没有:id参数,除非你根据你的路由设置如何通过它。也就是说,你必须去/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

+0

我将路由更改为上述示例,但仍收到相同的错误消息。 – sergio

+0

@sergio相应地更改链接。顺便说一句,你怎么期望它的工作,因为你没有传递你的'维基'id到任何地方的链接? –

+0

是否将'wiki_show_path'更改为'wiki_path(@wiki)'? url助手需要知道要链接到哪个wiki对象。 –

0

params[:id]是最有可能nil,除非你通过它像/wikis/show?id=123,因为路线get 'wikis/show'没有任何PARAMS。

最常见的方法是让resources :wikis和路线像/wikis/123

1

你有这样的错误,因为你不wiki的ID传递到您的节目链接,因此最简单的解决方案提供了一个ID:

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

不过说实话,你的代码看起来很丑陋与这些自定义路线wikis控制器,它可以通过将简单地取代:

resources :wikis 

在您的routes.rb中。通过这种方式,链接到单wiki显示页面也更简单:

<%= link_to wiki.title, wiki %> 

您可能需要阅读Rails routing guide

0

在你的路由

resources :wikis

加入这行并删除下面的代码:

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

现在你可以在网址写:websitename.com/wikis索引,websitename。 com/wikis/id,websitename.com/wikis/id/edit编辑...并获得你的ID参数...

了解更多关于资源在这个环节:Resources Link