Activerecord 不能';找不到<;对象>;没有ID rails 3.0.1

Activerecord 不能';找不到<;对象>;没有ID rails 3.0.1,activerecord,model,view,ruby-on-rails-3,Activerecord,Model,View,Ruby On Rails 3,不幸的是,这是我这几天来的第二篇文章。因此,应用程序在mysql和rails 3.0.3上运行良好,但我发现我需要使用MSSQL,所以我不得不将rails降级到3.0.1 简而言之,我将show.html.erb复制为show2.html.erb,并创建了一个新方法,它是show方法的副本。然后我创建了一个路由匹配 我的控制器 class fathersController < ApplicationController def show @father= Father.fin

不幸的是,这是我这几天来的第二篇文章。因此,应用程序在mysql和rails 3.0.3上运行良好,但我发现我需要使用MSSQL,所以我不得不将rails降级到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
当我打电话时

http://127.0.0.1:3000/father/1
http://127.0.0.1:3000/father/1/show2
我可以观看演出,但当我打电话时

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作为父辈id传递,但我如何修复它?任何帮助都将不胜感激。

有两个问题

  • 您试图在一条实际上应该是资源丰富的路线上使用非资源丰富的路线
  • 看起来您正试图将
    /show2
    发送到名为
    hospitals
    的控制器,而您的操作实际上是在
    控制器上指定的
  • 这应该可以做到:

    resources :fathers do
      get :show2, :on => :member
      resources :kids
    end
    
    您也可以将上述内容写成:

    resources :fathers do
      member do
        get :show2
      end
    
      resources :kids
    end    
    

    谢谢,我试过了,但是现在它传递了正确的变量,但是现在我得到了错误,我昨天得到了nil:NilClass的未定义方法'name',所以现在它不认为父类是合法的,这对我来说是一个不同的问题,比如,不是路由问题。请您就相关控制器、模型和视图提出一个新问题,谢谢您的帮助。我忘记了,把这个方法从我的控制器里拿了出来。