[英]Comment delete ActionView::Template::Error (undefined method `each' for nil:NilClass):
[英]HTTP500: server error!! ActionView::Template::Error (undefined method `id' for nil:NilClass)
我的IE開發人員工具出現錯誤:
HTTP500:服務器錯誤-服務器遇到意外情況,阻止其滿足請求。 (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
為nil,但我不知道這怎么可能。 這是我正在做的事情的背景:
我定義了一個視圖events\\new.html.erb
,其中包含帶有collection_select
的表單,該表單允許客戶選擇另一個客戶(被視為“同事”):
#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
? 我將不勝感激。
$('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
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.