nil:nilclass的未定义方法'status'

时间:2011-09-06 06:16:05

标签: ruby-on-rails nested nomethoderror

好奇怪的错误。一切都很好......现在不行。

目前我有一个简单的多对一协会。

路线设置如下:

resources :apps do
  resources :forms
end

应用:

has_many :forms

形式:

belongs_to :app

Forms_controller索引操作:

def index
  @app = App.find(params[:app_id])
  @forms = @app.forms
  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @forms }
  end
end

我已经从forms.html.erb布局文件中取出了所有代码/ html,因此它应该呈现一个空白页面。

相反,我收到了这个错误:

nil的未定义方法`status':NilClass

我的应用中的任何地方都没有定义状态

帮助将不胜感激。

编辑:

以下是我的development.log文件中显示的内容

Started GET "/apps/4/forms" for 127.0.0.1 at 2011-09-05 23:14:16 -0700
  Processing by FormsController#index as HTML
  Parameters: {"app_id"=>"4"}
  [1m[36mApp Load (0.1ms)[0m  [1mSELECT "apps".* FROM "apps" WHERE "apps"."id" = ? LIMIT 1[0m  [["id", "4"]]
  [1m[35m (0.1ms)[0m  SELECT COUNT(*) FROM "forms" WHERE "forms"."app_id" = 4
0
  [1m[36mForm Load (0.1ms)[0m  [1mSELECT "forms".* FROM "forms" WHERE "forms"."app_id" = 4[0m
Rendered forms/index.html.erb within layouts/forms (1.2ms)
Completed 500 Internal Server Error in 37ms

NoMethodError (undefined method `status' for nil:NilClass):

4 个答案:

答案 0 :(得分:5)

我有一个类似的问题 - 我有一个名为'response'的方法,Rails内部的某个东西正在调用'status',并且它同样被保护而没有堆栈跟踪可以说。

对于名为“app”和“forms”的内容,您可能会遇到类似的问题。

答案 1 :(得分:0)

找不到

@app ,您可以在尝试

中获取表单
def index
  @app = App.find(params[:app_id])
  @forms = @app.try(:forms)
  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @forms }
  end
end

如果您的模板处理@app,并且拥有它很重要,那么最好处理异常:

def index
  @app = App.find!(params[:app_id]) # raise an exception until find
  @forms = @app.forms
rescue
  flash[:error] = "App not found!"
end

答案 2 :(得分:0)

首先,请检查log / development.log或浏览器。它应该可以帮助你解决错误。

接下来,什么是params值?检查log / development.log。它可能如下所示:

...
Processing FormsController#index (for 127.0.1.1 at YYYY-MM-DD hh:mm:ss) [GET]
Parameters: {...}
...

答案 3 :(得分:0)

对于内部服务器错误,您的应用程序无法正常启动。您应该检查服务器错误日志。它可以让您深入了解问题所在。如果您或团队成员(视情况而定)没有进行任何破坏应用程序的更改,那么您应该与您的主机核实。也许他们对您的环境进行了更改,导致错误。