2011-01-08 203 views
3

不幸的是,这是我多天来的第二篇文章。所以应用程序在mysql和rails 3.0.3下运行良好,但是我发现我需要使用MSSQL,因此我必须将rails降级到3.0.1。找不到<object>没有ID导轨3.0.1

简而言之,我将show.html.erb复制为show2.html.erb并创建了一个新方法,它是show方法的副本。然后我创建了一个路线匹配。

我控制器

class fathersController < ApplicationController 
    def show 
    @father= Father.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @father} 
    end 
    end 

    def show2 
    @father= Father.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @father} 
    end 
    end 
end 

的routes.rb

resources :fathers do 
    match '/show2' => 'fathers#show2' 
    resources :kids 
end 

当我打电话

http://127.0.0.1:3000/father/1 

我得到的放映视图,但是当我打电话

http://127.0.0.1:3000/father/1/show2 

我收到以下错误

Couldn't find father without an ID 

请求参数回来为

{"father_id"=>"1"} 

,所以我知道,问题是,应用程序是通过ID作为father_id但我怎么解决?任何帮助,将不胜感激。

回答

1

有两个问题。

  1. 您试图在实际应该是足智多谋的路线上使用非资源性路线。
  2. 看起来您正试图将/show2发送到名为hospitals的控制器,当您的操作在fathers控制器上实际指定时。

这应该做的伎俩:

resources :fathers do 
    get :show2, :on => :member 
    resources :kids 
end 

你也可以写在上面:

resources :fathers do 
    member do 
    get :show2 
    end 

    resources :kids 
end  
+0

谢谢,我试过,但现在它正在传递正确的变量,但现在我得到我昨天得到的错误为nil:NilClass的未定义方法`name',所以现在它没有看到父类是合法的 – 2011-01-08 04:13:17