2012-07-27 51 views
0

我在我的應用程序運行到一個錯誤,解釋的背景:一個用戶有好幾輛車,每輛車可以使一個,因此我的坦克是TankingLogsController以下NoMethodError在NameController#新

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' 

爲什麼我的應用程序失敗?

回答

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

+0

是的,我看到了,謝謝我不知道發生了什麼事 – Asantoya17 2012-07-27 15:11:50