Как я могу убедиться, что controller.action_name возвращает правильную информацию? Я полагаюсь на это для создания удобных сообщений в строке меню. Рассмотрим следующий сценарий.
Метод action_name отлично работает, когда я использую:
redirect_to edit_profile_path # I get action_name as "edit" in my ApplicationController
Но это не дает нужную мне информацию, когда я использую следующее:
render :action => "edit" # The action_name shows as "get" instead of "edit"
Есть ли способ использовать действие рендера и при этом получить правильное имя действия?
Спасибо,
Tabrez
---- фрагменты кода в ответ на комментарий Миши ----
Вот что у меня в контроллере:
def update
if @profile.update_attributes(params[:profile])
format.html {
flash.now[:notice] = 'Profile was successfully updated.'
render :action => "edit"
}
end
Я не перенаправляю, потому что я все еще хочу, чтобы пользователь оставался в режиме редактирования.
В моем помощнике приложения у меня есть код следующего эффекта:
if(action_name == "edit" && (can? :read, l_disp_object) ) then
path_links_subheader.concat(link_to 'Show Saved Version', :controller => controller.controller_path, :action => :show)
end
Обычно, если пользователь находится в режиме редактирования, мне нужна ссылка «Показать сохраненную версию» в меню. Но когда я использую синтаксис «render: action», действие меняется на «get», что имеет смысл, основываясь на том, что упомянул Миша (там действие является неправильным…) Итак, есть ли способ, которым я могу сделать это без перенаправления? Единственная причина, по которой я еще не использую перенаправление, заключается в том, что логика сохранения текущей вкладки для пользователя работает с действием рендеринга. Возможно, мне придется переписать его, если единственный возможный способ сделать это - через перенаправления.