Индексное действие не отображает всплывающие уведомления

У меня есть trackers_controler с действием уничтожения. Я пытаюсь перенаправить действие уничтожения на индекс при уничтожении, потому что все эти трекеры отображаются в сводной таблице в index.

В моем действии уничтожения, когда я перенаправляю на tracker_url, мое уведомление о флэш-памяти отображается правильно. Но URL-адрес имеет идентификатор (как и должно быть)

 redirect_to tracker_url, :notice => "Tracker Disabled!"
 redirect with the flash notice displaying
 /trackers/trackers/5

Когда я перенаправляюсь на индекс, используя перенаправление ниже, оно показывает флэш-уведомление в URL-адресе, но не отображает флэш-уведомление в сообщении.

redirect_to :action => index, :notice => "Tracker Disabled!"
redirects without the flash notice
/trackers?notice=Tracker+Disabled%21

Для отладки я скопировал код из index.html.erb и show.html.erb, чтобы они были идентичными и по-прежнему отображали флэш-уведомление как часть URL-адреса, даже если они оба имеют рендеринг для сообщений в одном и том же месте. Партиал для сообщений находится в папке layouts/messages.

<%= render 'layouts/messages' %>

Ниже мое шоу и индекс

def index
   authorize! :view, :silver, :message => 'Access limited to Silver Plan subscribers.'

   @new_tracker = Tracker.new
   @current_user = current_user
   @trackers_enabled = Tracker.enabled.where(:user_id => @current_user.id)
   @trackers_disabled = Tracker.disabled.where(:user_id => @current_user.id)
 end

def show
   authorize! :view, :silver, :message => 'Access limited to Silver Plan subscribers.'

  @new_tracker = Tracker.new
  @current_user = current_user
  @trackers_enabled = Tracker.enabled.where(:user_id => @current_user.id)
  @trackers_disabled = Tracker.disabled.where(:user_id => @current_user.id)
end

Из моего журнала разработки вот сообщения после редиректа

SHOW

Перенаправлено на /trackers/1 Завершено 302 Найдено за 19 мс (ActiveRecord: 13,8 мс)

Начат GET "/trackers/1" для 127.0.0.1 в 2013-09-14 11:06:06 -0500 Обработка TrackersController#show as HTML Параметры: {"id"=>"1"}

INDEX

Перенаправлено на /trackers?notice=Tracker+Disabled%21 Completed 302 Found in 19ms (ActiveRecord: 13,5ms)

Начат GET "/trackers?notice=Tracker+Disabled%21" для 127.0.0.1 в 2013-09-14 11:06:51 -0500 Обработка TrackersController#index как HTML-параметры: {"notice"=>"Трекер отключен! "}


person Austio    schedule 14.09.2013    source источник


Ответы (1)


Эта линия имеет проблему

redirect_to :action => index, :notice => "Tracker Disabled!"

Часть уведомления становится параметром #index в вашем коде, а не аргументом redirect_to.

Чтобы исправить, используйте именованный путь. Предположим, что ваш путь к индексной странице равен trackers_path, тогда

redirect_to trackers_path, :notice => "Tracker Disabled!"
person Billy Chan    schedule 14.09.2013
comment
Часто желательно не переопределять весь путь для перенаправления в контексте определенного контроллера. В этом случае различение хэша пути от параметров должно выполнить следующее: redirect_to({ :action => index }, :notice => "Tracker Disabled!") - person pdobb; 16.09.2013