redirect_to не обновляет страницу в Rails 3 - PullRequest
0 голосов
/ 04 апреля 2011

У меня есть панель инструментов, которая содержит несколько бит информации.Один из этих битов - это события, о которых пользователь хочет напомнить.Каждое из этих событий отображается вместе с пустым флажком.Если пользователь установит флажок, запись о событии обновляется, и панель мониторинга должна обновляться без недавно проверенного события.

Все это работает, за исключением последней части.Что меня так озадачивает, так это то, что просмотр журнала показывает идентичные операторы регистрации для этого перенаправления на панель мониторинга после обновления объекта 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).

1 Ответ

0 голосов
/ 04 апреля 2011

Если у вас есть

format.html { redirect_to dashboards_path }

или

format.html { redirect_to dashboard_path(@event) }
...