【问题标题】:Couldn't find <object> without an ID rails 3.0.1找不到没有 ID rails 3.0.1 的 <object>
【发布时间】:2011-01-08 03:25:48
【问题描述】:

很遗憾,这是我这么多天以来的第二篇文章。所以应用程序在 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

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 传递,但我该如何解决?任何帮助将不胜感激。

【问题讨论】:

    标签: activerecord model view ruby-on-rails-3


    【解决方案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    
    

    【讨论】:

    • 谢谢,我试过了,但现在它传递了正确的变量,但现在我得到了错误,我昨天得到了 nil:NilClass 的未定义方法“名称”,所以现在它看不到父类作为合法的
    • 这对我来说听起来像是一个不同的问题——例如,不是路由问题。您能否针对相关的控制器、模型和视图提出一个新问题?
    • 感谢您的帮助。我忘记了并从控制器中取出了该方法。
    猜你喜欢
    • 2011-09-07
    • 1970-01-01
    • 2020-05-18
    • 2019-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多