У меня есть панель инструментов, которая содержит несколько бит информации.Один из этих битов - это события, о которых пользователь хочет напомнить.Каждое из этих событий отображается вместе с пустым флажком.Если пользователь установит флажок, запись о событии обновляется, и панель мониторинга должна обновляться без недавно проверенного события.
Все это работает, за исключением последней части.Что меня так озадачивает, так это то, что просмотр журнала показывает идентичные операторы регистрации для этого перенаправления на панель мониторинга после обновления объекта Event, как и при первоначальной загрузке панели мониторинга.Запрос на поиск объектов Event для отображения на панели мониторинга выполняется в обоих случаях в соответствии с журналами.Как будто фактическое обновление объекта Event происходит недостаточно быстро для последующего запроса, и этот последующий запрос «находит» исходные необновленные данные ...
Вот код:
Вид:
<% @triggered_events.each do |event| %>
<p>
<%= image_tag 'indicator.gif', :id => "indicator-#{event.id}",:style => 'display: none' %>
<span class="grayItalics"><%= truncate(event.title, :length => 25) %></span> --- <% if event.contact_id != nil %>
<%= full_name_by_contact(Contact.find(event.contact_id)) %> <% end %>
<%= l event.start, :format => :yyyyMMdd %> (<%= event.reminder_lead_value %> <%= event.reminder_lead_unit %>)
<%= check_box_tag 'event[recognized_flag]', "1", event.recognized_flag, :onclick => toggle_value(event) %>
<%= link_to 'View Event', event %>
<hr>
</p>
<% end %>
Помощник:
def toggle_value(object)
remote_function(:url => dashboard_path(:id => object),
:method => :put,
:before => "Element.show('indicator-#{object.id}')",
:complete => "Element.hide('indicator-#{object.id}')" )
end
Контроллер:
def update
@event = Event.find(params[:id])
@event.recognized_flag=true
respond_to do |format|
if @event.update_attributes(params[:event])
format.html { redirect_to dashboard_path }
format.xml { head :ok }
else
format.html { redirect_to dashboard_path }
format.xml { render :xml => @event.errors, :status => :unprocessable_entity }
end
end
end
РЕДАКТИРОВАТЬ: добавление маршрутов:
get 'dashboard' => 'dashboard#index'
put 'dashboard' => 'dashboard#update' # added specifically for the Event update mentioned in this question
Теперь, это обновление объекта Event происходит в контроллере Dashboard ... что, вероятно, не самое большое.Однако в контроллере событий используется собственный метод «Update», и он перенаправляет по пути, отличному от Dashboard, поэтому он не был доступен для этого экземпляра ... но я не думаю, что это является причиной этой проблемы.
Любая помощь приветствуется.
Я бы также добавил, что обновление страницы (F5) показывает, что объект Event обновляется (и, следовательно, не отображается на панели инструментов послеF5).