HTTP500:服务器错误!! ActionView :: Template :: Error(未定义的方法`id'对于nil:NilClass)

时间:2016-01-21 19:48:27

标签: javascript jquery ruby-on-rails ruby ajax

我在IE开发人员工具中遇到错误:

  

HTTP500:SERVER ERROR - 服务器遇到意外情况,导致服务器无法完成请求。   (XHR):GET - http://127.0.0.1:3000/calendars/calendar_change?colleagueID=3

我的终端显示此错误:

Completed 500 Internal Server Error in 158ms

ActionView::Template::Error (undefined method `id' for nil:NilClass):
    1: alert("<%= @colleague.id %>")
  app/views/calendars/calendar_change.js.erb:1:in `_app_views_calendars_calendar_change_js_erb__940402316_55367244'

错误报告@colleague为零,但我不明白这是怎么回事。以下是我正在做的事情的背景:

我定义了一个视图events\new.html.erb,其中包含一个带有collection_select的表单,允许客户选择其他客户(被视为同事&#39;):

#events\new.html.erb
<%= f.collection_select :id,
      Customer.where(business_id: current_customer.business_id),
      :id,
      :full_name,
      { prompt: 'Select' },
      { id: "colleageselect", onChange: "renderColCal(this)" } 
%>

这将执行收集所选客户价值的Javascript函数:

function renderColCal(select){

    var colleagueID = select.value ;
    $.ajax({
            url: 'calendars/calendar_change',
            data:{
                colleagueID: $('select').val()
            }
        }
    )
}

会被发送到calendars_controller\calendar_change操作:

def calendar_change
    colleagueID = params[:colleagueID] #is this correct? 


    @colleague = Customer.find(colleagueID) #@colleague is showing up as 'nil'
    @colcalendar = @colleague.calendar
    @events = @colleague.calendar.events

 end

此处是我的calendar_change视图(我只是在实际实现任何实际内容之前尝试使用简单警报来停止服务器错误):

#calendars\calendar_change.js.erb

alert("<%= @colleague.id %>")

那么为什么我在Ruby中创建的@colleague变量显示为nil?我很感激你的帮助。

1 个答案:

答案 0 :(得分:0)

$('select')表达式返回DOM元素的集合,而不是单个<select>元素。这意味着表达式$('select').val()不会返回ID,而是undefined

您不需要$('select').val(),因为您已将值存储在colleagueID中。您需要像这样重构代码:

function renderColCal(select){

    var colleagueID = select.value ;
    $.ajax({
        url: 'calendars/calendar_change',
        data:{
            colleagueID: colleagueID
        }
    });
}