【问题标题】:NoMethodError in NameController#newNameController 中的 NoMethodError#new
【发布时间】:2012-07-27 15:05:27
【问题描述】:

我在我的应用程序中遇到了一个错误,解释上下文:一个用户有几辆车,每辆车都可以进行坦克,因此我的 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'

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

【问题讨论】:

    标签: ruby-on-rails-3 controller nomethoderror


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多