ActionView :: Template :: Error (неопределенная локальная переменная или метод `event 'для # <# - PullRequest
0 голосов
/ 08 мая 2020

Я построил таблицу, которая позволяет редактировать записи прямо на месте; проблема, с которой я сталкиваюсь, заключается в том, что частичный не будет повторно отображать данные после обновления в представлении. Я использую отдельный контроллер для обработки частичного обновления / редактирования рендеринга. Я могу успешно визуализировать форму встроенной, я просто не могу пройти обновление частичной ошибки, не получив неопределенную локальную переменную. Как я могу повторно отрендерить партиал для моего действия update. js .erb в другом контроллере?

_inline_form. html .erb

<%= form_with model: facility_event_tracker, class: 'divTableRow', id: dom_id(facility_event_tracker, 'inline_form'), local: false do |f| %>
 <div class="divTableCell">
   <%= chart_tracker_grid_date(f.object.start_time) %>
 </div>
<div class="divTableCell">
  <%= text_field :event_count, label: false %>
</div>
<% end %>
<div class="divTableCell">
  <%= f.submit 'Submit', class: 'ui black button basic' %>
</div>

charts_controller.rb

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

Facility_event_trackers_controller.rb

def edit
end

def update
respond_to do |format|
 if @facility_event_tracker.update(facility_event_tracker_params)
   format.js {}
 else
 format.js {}
end

редактировать. js .erb

document.getElementById('<%= dom_id(@facility_event_tracker) %>').insertAdjacentHTML('afterend', "<%= j render 'inline_form', facility_event_tracker: @facility_event_tracker %>");

обновлять. js .erb

document.getElementById('<%= dom_id(@facility_event_tracker, 'inline_form') %>').remove()
document.getElementById('<%= dom_id(@facility_event_tracker, 'inline_form') %>').innerHTML = <%= j render "facility_event_trackers/facility_event_tracker", facility_event_tracker: @facility_event_tracker %>"
document.getElementById('<%= dom_id(@facility_event_tracker) %>').style.display = 'table-row'

Ошибка консоли Rails

// частичный отказ от повторного рендеринга для обновления

ActionView::Tempalate::Error (undefined local variable or method `event' for #<#<Class:0x00000>:0x00005>):
1: <div class="divTableCell"><%= chart_tracker_grid_date(event.start_time) %>...
2: <div class="divTableCell"><%= event.event_count %></div>

app/views/facility_event_trackers/_facility_event_tracker.html.erb:1
app/views/facility_event_trackers/update.js.erb

1 Ответ

0 голосов
/ 09 мая 2020

Кажется, вы передаете только update.js.erb файлу объект facility_event_tracker, а не объект события:

document.getElementById('<%= dom_id(@facility_event_tracker, 'inline_form') %>').innerHTML = <%= j render "facility_event_trackers/facility_event_tracker", facility_event_tracker: @facility_event_tracker %>"

Я рекомендую вам добавить:

document.getElementById('<%= dom_id(@facility_event_tracker, 'inline_form') %>').innerHTML = <%= j render "facility_event_trackers/facility_event_tracker", facility_event_tracker: @facility_event_tracker, event: @event %>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...