Есть ли способ остановить выполнение вызывающего метода, чтобы избежать DoubleRenderError в Rails? - PullRequest
2 голосов
/ 04 ноября 2010

В моем контроллере у меня есть:

def update
  case params[:something]
  when 'x'
    if all_is_good
      good_stuff_happens
      flash[:notice] = "Good stuff happened"
    else
      access_denied
    end
  when 'y'
    other_good_stuff_happens
    flash[:notice] = "Other good stuff happened"
  when 'z'
    even_more_good_stuff_happens
    flash[:notice] = "Even more good stuff happened"
  end
  redirect_to good_place_path       
end

И в моем ApplicationController у меня есть:

def access_denied
  redirect_to message_path, :alert => 'Access Denied'
end

По большей части, я всегда хочу перенаправить на good_place_path после оператора case.

Иногда я хочу запретить доступ и оставить все как есть. Есть ли способ, которым я могу позвонить

acccess_denied

с моего контроллера, а затем не возвращаться к вызывающему контроллеру (или он пытается выполнить второе перенаправление, и, таким образом, я получаю DoubleRenderError) Я понимаю, я мог бы просто поставить

redirect_to good_place_path       

в каждом утверждении когда, но мне интересно, есть ли более элегантное решение.

Спасибо.

Sean

1 Ответ

5 голосов
/ 04 ноября 2010

Добавить return после работы redirect_to, поэтому добавление его после access_denied также должно работать. По сути, вы не хотите проваливаться на рендеринг, который используется по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...