我在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
?我很感激你的帮助。
答案 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
}
});
}