0

我在我的应用程序中遇到了一个错误,以解释上下文:一个用户有几辆车,每辆车都可以进行加油,因此我的 TankingLogsController 如下

class TankingLogsController < ApplicationController
    def new
        @user = User.find(params[:user_id])  
        @car = @user.cars.find(params[:car_id])
        @tankinglog = @cars.tanking_logs.build
    end
end

这是我的 routes.rb 文件

Estaciones::Application.routes.draw do
root :to => "static_pages#home"
match '/contact', :to=>'static_pages#contact'
match '/about', :to=>'static_pages#about'
devise_for :users
resources :users do
    resources :cars do
    resources :tanking_logs
end
end
...

我遇到了这个错误:

NoMethodError in TankingLogsController#new

undefined method `tanking_logs' for nil:NilClass

Application Trace | Framework Trace | Full Trace
app/controllers/tanking_logs_controller.rb:5:in `new'

为什么我的应用程序失败?

4

1 回答 1

1

您有一个非常明显的错误,Ruby 会准确地告诉您它是什么以及在哪里可以找到它。

你写过:

@car = @user.cars.find(params[:car_id])
@tankinglog = @cars.tanking_logs.build

您初始化了@car在第一行调用的变量,并在第二行引用了第二个未初始化的变量@cars

您从未初始化@cars变量,因此它为零。打电话给@cars.tanking_logs原因undefined method 'tanking_logs' for nil:NilClass,因为你在有效地写作nil.tanking_logs

第二行应该使用@car.tanking_logs.

于 2012-07-27T15:07:06.547 回答