Rails DateTime - NoMethodError(未定义的方法`[]'为nil:NilClass)

时间:2013-09-13 03:59:56

标签: ruby-on-rails ruby database activerecord fullcalendar

这是我的模特:

class User < ActiveRecord::Base
has_many :appointments
has_many :doctors, :through => :appointments
end

class Doctor < ActiveRecord::Base
has_many :appointments
has_many :users, :through => :appointments
end

class Appointment < ActiveRecord::Base
belongs_to :doctor
belongs_to :user
end

调用控制器操作的代码:

$.ajax({
  type: "POST",
  url: "/create",
  data: {
    appointment_date: date,
    doctor_id: "1",
    user_id: "1"
  }

// Etc。});

动作:

def create
    @appointment = Appointment.new(:appointment_date => params[:data][:appointment_date], 
        :hairdresser_id => params[:data][:doctor_id], :user_id => params[:data][:user_id])
    if @appointment.save
        flash[:success] = "Welcome!"
        redirect_to @user
    else
        alert("failure!")
    end
end

我收到了这个错误:

NoMethodError (undefined method `[]' for nil:NilClass)

我正在使用FullCalendar插件,它以这种格式获取日期:

Fri Sep 13 2013 12:00:50 GMT-0400 (EDT)

我将该日期保存到日期时间字段中的数据库。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

当你进行ajax调用时,你可以访问像

这样的变量
params[:appointment_date]
params[:doctor_id]
params[:user_id]

而不是

params[:data][:appointment_date]
params[:data][:doctor_id]
params[:data][:user_id]

由于没有任何叫做params [:data]的东西,它给你一个零类错误。

答案 1 :(得分:1)

如果是约会控制器的创建操作,那么它将是

$.ajax({
  type: "POST",
  url: "/appointments",
  data: {
    appointment_date: date,
    doctor_id: "1",
    user_id: "1"
  }

在创建动作

def create
    @appointment = Appointment.new({:appointment_date => params['appointment_date'], 
        :hairdresser_id => params['doctor_id'], :user_id => params['user_id]'})
    if @appointment.save
        #YOUR CODE
    else
        #YOUR CODE
    end
end