2016-01-29 50 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是不好的做法。

相关问题