[英]NoMethodError at /calculate undefined method `id' for nil:NilClass in Rails Appilcation
[英]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
您可以這樣做:
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.