簡體   English   中英

HTTP500:服務器錯誤! ActionView :: Template :: Error(nil:NilClass的未定義方法“ id”)

[英]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
        }
    });
}

ActionView::Template::Error (#&lt;# 的未定義局部變量或方法“事件” <class::0x000.. rails 6 ajax< div><div id="text_translate"><p> 我建立了一個表格,允許您內聯編輯記錄; 我遇到的問題是部分數據在視圖中刷新后不會重新渲染數據。 我正在使用單獨的 controller 來處理更新/編輯部分渲染。 我可以成功地內聯呈現表單,我只是無法通過更新部分錯誤而沒有收到未定義的局部變量。 如何在不同的 controller 中重新渲染我的 update.js.erb 操作的部分?</p><p> <strong>圖表/facility_chart.html.erb</strong></p><pre> &lt;div class="divTable greyGridTable"&gt; &lt;div class="divTableHeading"&gt; &lt;div class="divTableRow"&gt; &lt;div class="divTableHead"&gt;Date&lt;/div&gt; &lt;% @facility_chart_events.select(:name).distinct.each |event_name| %&gt; &lt;div class="divTableHead"&gt;&lt;%= event_name %&gt;&lt;/div&gt; &lt;% end %&gt; &lt;div class="divTableHead"&gt;Update/Change&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="divTableBody"&gt; &lt;% @facility_event_grids.each do |event| %&gt; &lt;%= content_tag:div, class: 'divTableRow', id: dom_id(event) do %&gt; &lt;%= render partial: "facility_event_trackers/facility_event_tracker", :locals =&gt; {event: event} %&gt; &lt;% end %&gt; &lt;% end %&gt; &lt;/div&gt; &lt;/div&gt;</pre><p> <strong>_inline_form.html.erb</strong></p><pre> &lt;%= form_with model: facility_event_tracker, class: 'divTableRow', id: dom_id(facility_event_tracker, 'inline_form'), local: false do |f| %&gt; &lt;div class="divTableCell"&gt; &lt;%= chart_tracker_grid_date(f.object.start_time) %&gt; &lt;/div&gt; &lt;div class="divTableCell"&gt; &lt;%= text_field:event_count, label: false %&gt; &lt;/div&gt; &lt;% end %&gt; &lt;div class="divTableCell"&gt; &lt;%= f.submit 'Submit', class: 'ui black button basic' %&gt; &lt;/div&gt;</pre><p> <strong>圖表控制器.rb</strong></p><pre> def facility_chart @facility = Facility.find(params[:id]) @facility_events_grids = @facility.facility_event_trackers.order(start_time: :desc).page(params[:page]).per(40) end</pre><p> <strong>facility_event_trackers_controller.rb</strong></p><pre> def edit end def update respond_to do |format| if @facility_event_tracker.update(facility_event_tracker_params) format.js {} else format.js {} end</pre><p> <strong>編輯.js.erb</strong></p><pre> document.getElementById('&lt;%= dom_id(@facility_event_tracker) %&gt;').insertAdjacentHTML('afterend', "&lt;%= j render 'inline_form', facility_event_tracker: @facility_event_tracker %&gt;");</pre><p> <strong>更新.js.erb</strong></p><pre> document.getElementById('&lt;%= dom_id(@facility_event_tracker, 'inline_form') %&gt;').remove() document.getElementById('&lt;%= dom_id(@facility_event_tracker, 'inline_form') %&gt;').innerHTML = &lt;%= j render "facility_event_trackers/facility_event_tracker", facility_event_tracker: @facility_event_tracker %&gt;" document.getElementById('&lt;%= dom_id(@facility_event_tracker) %&gt;').style.display = 'table-row'</pre><p> <strong>Rails 控制台錯誤</strong></p><p> // 部分無法重新渲染以進行更新</p><pre>ActionView::Tempalate::Error (undefined local variable or method `event' for #&lt;#&lt;Class:0x00000&gt;:0x00005&gt;): 1: &lt;div class="divTableCell"&gt;&lt;%= chart_tracker_grid_date(event.start_time) %&gt;... 2: &lt;div class="divTableCell"&gt;&lt;%= event.event_count %&gt;&lt;/div&gt; app/views/facility_event_trackers/_facility_event_tracker.html.erb:1 app/views/facility_event_trackers/update.js.erb</pre></div></class::0x000..>

[英]ActionView::Template::Error (undefined local variable or method `event' for #<#<Class::0x000.. Rails 6 AJAX

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 評論刪除 ActionView::Template::Error (nil:NilClass 的未定義方法 `each'): HTTP500:aspx頁面上的服務器錯誤僅出現在邊緣 nil:NilClass的未定義方法“事件” 未定義的方法“公司”為 nil:NilClass ActionView::Template::Error (#&lt;# 的未定義局部變量或方法“事件” <class::0x000.. rails 6 ajax< div><div id="text_translate"><p> 我建立了一個表格,允許您內聯編輯記錄; 我遇到的問題是部分數據在視圖中刷新后不會重新渲染數據。 我正在使用單獨的 controller 來處理更新/編輯部分渲染。 我可以成功地內聯呈現表單,我只是無法通過更新部分錯誤而沒有收到未定義的局部變量。 如何在不同的 controller 中重新渲染我的 update.js.erb 操作的部分?</p><p> <strong>圖表/facility_chart.html.erb</strong></p><pre> &lt;div class="divTable greyGridTable"&gt; &lt;div class="divTableHeading"&gt; &lt;div class="divTableRow"&gt; &lt;div class="divTableHead"&gt;Date&lt;/div&gt; &lt;% @facility_chart_events.select(:name).distinct.each |event_name| %&gt; &lt;div class="divTableHead"&gt;&lt;%= event_name %&gt;&lt;/div&gt; &lt;% end %&gt; &lt;div class="divTableHead"&gt;Update/Change&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="divTableBody"&gt; &lt;% @facility_event_grids.each do |event| %&gt; &lt;%= content_tag:div, class: 'divTableRow', id: dom_id(event) do %&gt; &lt;%= render partial: "facility_event_trackers/facility_event_tracker", :locals =&gt; {event: event} %&gt; &lt;% end %&gt; &lt;% end %&gt; &lt;/div&gt; &lt;/div&gt;</pre><p> <strong>_inline_form.html.erb</strong></p><pre> &lt;%= form_with model: facility_event_tracker, class: 'divTableRow', id: dom_id(facility_event_tracker, 'inline_form'), local: false do |f| %&gt; &lt;div class="divTableCell"&gt; &lt;%= chart_tracker_grid_date(f.object.start_time) %&gt; &lt;/div&gt; &lt;div class="divTableCell"&gt; &lt;%= text_field:event_count, label: false %&gt; &lt;/div&gt; &lt;% end %&gt; &lt;div class="divTableCell"&gt; &lt;%= f.submit 'Submit', class: 'ui black button basic' %&gt; &lt;/div&gt;</pre><p> <strong>圖表控制器.rb</strong></p><pre> def facility_chart @facility = Facility.find(params[:id]) @facility_events_grids = @facility.facility_event_trackers.order(start_time: :desc).page(params[:page]).per(40) end</pre><p> <strong>facility_event_trackers_controller.rb</strong></p><pre> def edit end def update respond_to do |format| if @facility_event_tracker.update(facility_event_tracker_params) format.js {} else format.js {} end</pre><p> <strong>編輯.js.erb</strong></p><pre> document.getElementById('&lt;%= dom_id(@facility_event_tracker) %&gt;').insertAdjacentHTML('afterend', "&lt;%= j render 'inline_form', facility_event_tracker: @facility_event_tracker %&gt;");</pre><p> <strong>更新.js.erb</strong></p><pre> document.getElementById('&lt;%= dom_id(@facility_event_tracker, 'inline_form') %&gt;').remove() document.getElementById('&lt;%= dom_id(@facility_event_tracker, 'inline_form') %&gt;').innerHTML = &lt;%= j render "facility_event_trackers/facility_event_tracker", facility_event_tracker: @facility_event_tracker %&gt;" document.getElementById('&lt;%= dom_id(@facility_event_tracker) %&gt;').style.display = 'table-row'</pre><p> <strong>Rails 控制台錯誤</strong></p><p> // 部分無法重新渲染以進行更新</p><pre>ActionView::Tempalate::Error (undefined local variable or method `event' for #&lt;#&lt;Class:0x00000&gt;:0x00005&gt;): 1: &lt;div class="divTableCell"&gt;&lt;%= chart_tracker_grid_date(event.start_time) %&gt;... 2: &lt;div class="divTableCell"&gt;&lt;%= event.event_count %&gt;&lt;/div&gt; app/views/facility_event_trackers/_facility_event_tracker.html.erb:1 app/views/facility_event_trackers/update.js.erb</pre></div></class::0x000..> nil:NilClass rails 4的未定義方法`category` EasyMarklet Rails gem:nil:NilClass的未定義方法“ []” Rails 4 Ajax NoMethodError-我的create.js.erb文件中nil:NilClass:的未定義方法&#39;id&#39; Rails 4 / ajax-NoMethodError-未定義的方法&#39;id&#39;為nil:NilClass-將變量傳遞給js模態 錯誤 500 Post 方法的內部服務器錯誤
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM