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し、2番目の行で2番目の初期化されていない変数を参照します。

@cars変数を初期化したことがないため、nilです。あなたが効果的に書いているので、呼び出す@cars.tanking_logsことは原因となります。undefined method 'tanking_logs' for nil:NilClassnil.tanking_logs

2行目はを使用する必要があります@car.tanking_logs

于 2012-07-27T15:07:06.547 に答える