簡體   English   中英

NoMethodError(對於nil:NilClass,未定義的方法“ id”):在Rails 4.0.2中

[英]NoMethodError (undefined method `id' for nil:NilClass): in Rails 4.0.2

任何人都可以提供幫助嗎?謝謝您的回復。

在app / controllers / heats_controller.rb中,代碼如下:

class HeatsController < ApplicationController
  def add_car
    Pusher[params[:sendTo]].trigger('addCar', car_params)
    head :ok
  end

  def index
    @heats = Heat.all
    render json: @heats
  end

  def new

    race = Race.all.sample

    render json: { start_time: Time.now.to_s,
                   race_id: race.id,
                   text: race.passage }
  end

  def show
    @heat = Heat.find(params[:id])
  end

  def start_game
    Pusher[params[:sendTo]].trigger('initiateCountDown', start_heat_params)
    head :ok
  end

  def update_board
    Pusher[params[:channel]].trigger('updateBoard', car_params)
    head :ok
  end

  private
  def heat_params
    params.require(:heat).permit(:race_id)
  end

  def car_params
    params.permit(:racer_id,
                  :racer_name,
                  :return_to,
                  :progress,
                  :racer_img,
                  :wpm,
                  :channel,
                  :sendTo)
  end

  def start_heat_params
    params.permit(:channel, :race_id, :text, :timer)
  end
end

在app / models / heat.rb中,代碼如下:

class Heat < ActiveRecord::Base
  belongs_to :race
  has_many :racer_stats
end

任何幫助將不勝感激,謝謝


錯誤:

Processing by HeatsController#new as */*
Completed 500 Internal Server Error in 6ms

NoMethodError (undefined method `id' for nil:NilClass):
  app/controllers/heats_controller.rb:18:in `new'

看來Race.all.sample不起作用。

也許您在races表中根本沒有記錄。

另外,嘗試以下操作以檢索隨機記錄(對於Rails 4):

def new
   offset = rand(Race.count)
   Race.offset(offset).first
   ...
end

錯誤在這里:

def new
  ... race_id: race.id ...
end

race沒有任何數據,因此調用.id將不起作用。 您還調用Race.all.sample (非常糟糕),這意味着您的Race模型中可能沒有記錄。


如果要選擇隨機記錄,則應使用以下答案得出一個:

def new
   race = Race.order("RAND()").first #-> MYSQL
   render json: { start_time: Time.now.to_s, race_id: race.id, text: race.passage } unless race.nil?
end

您可以這樣做:

render json: { start_time: Time.now.to_s,
                   race_id: race.try(:id),
                   text: race.try(:passage) }

如果您的.sample返回nil,這將解決抱怨的nil錯誤。 但是我同意all.sample是不好的做法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM