2016-01-29 48 views
0

任何人都可以提供幫助嗎?在此先感謝您的回覆。NoMethodError(未定義的方法`id'for nil:NilClass):in Rails 4.0.2

在應用程序/控制器/ 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 

在應用程序/模型/ 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' 
+1

在問題中添加導軌服務器日誌.. –

+0

Race.all.sample中的'sample'是什麼? – RSB

回答

0

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

也許你在races表中沒有記錄。

而且,試試這個檢索隨機記錄(軌道4):

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

的錯誤是在這裏:

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

race沒有任何數據,就這麼叫.id將無法工作。你也打電話Race.all.sample(非常糟糕),這意味着你已經可能沒有在你的Race模型中的記錄。


如果你想選擇一個隨機的記錄,你應該use this answer拉一個:

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 
+0

對不起,如果我使用postgresql,它會是一樣的嗎? –

+0

只需將'RAND()'改爲'RANDOM()' –

0

你可以這樣做:

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

這是否會解決愛發牢騷零錯誤的.sample返回nil。 但我同意all.sample是不好的做法。

相關問題