Насколько надежен метод action_name в рельсах? - PullRequest
3 голосов
/ 30 марта 2012

Как я могу убедиться, что 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», что имеет смысл, основываясь на том, что упомянул Миша (там действие является неправильным…) Итак, есть ли способ, которым я могу сделать это без перенаправления? Единственная причина, по которой я еще не использую перенаправление, заключается в том, что логика сохранения текущей вкладки для пользователя работает с действием рендеринга. Возможно, мне придется переписать его, если единственный возможный способ сделать это - через перенаправления.

1 Ответ

4 голосов
/ 30 марта 2012

Именование немного сбивает с толку, но render :action => "edit" отображает редактирование view Он не имеет ничего общего с действием контроллера edit. action_name надежен, но по вышеуказанной причине вы не можете на него положиться. Откройте новый вопрос и / или поделитесь еще кодом, чтобы узнать, как решить вашу проблему.

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