2014-11-26 1 views
0

Я зарегистрировал виджет в ActiveAdmin и хочу изменить перенаправление, которое происходит после создания нового. Так что я могу выполнять различные вещи с Javascript, я создал пользовательскую форму для создания/редактирования их таким образом, что в /admin/widget.rb у меня есть это:Могу ли я переопределить только часть действия контроллера ActiveAdmin с помощью `super` + custom redirect?

form do |f| 
    render "create_or_edit_widget" 
    end 

Я хочу изменить основные Admin::WidgetsController#create меры для изменения, когда пользователь перенаправляется после успешного создания. Я могу заполнить остальную часть пользовательского действия, чтобы завершить это, за исключением того, что я не знаю, как обрабатывать случай, когда .save терпит неудачу, и пользователь перенаправляется обратно в форму с сообщений об ошибках formtastic inline. Я знаю, как это сделать, если бы я хотел, чтобы нормальная форма Rails создавала список сообщений об ошибках, но не достаточно о Formtastic для копирования ее поведения. До сих пор у меня есть это:

controller do 
    def create 
    @widget = Widget.new(params[:widget]) 
    if @widget.save 
     redirect_to admin_widgets_path, notice: "Successfully created Widget." 
    else 
     redirect_to :back 
    end 
    end 
end 

Мне было интересно, смогу ли я каким-то образом пользователь super, а затем только изменить путь переадресации после успешного создания, вместо того, чтобы выписать все действие. Если это невозможно, может ли кто-нибудь сказать мне, где в ActiveAdmin GitHub я смогу найти стандартное действие #create, чтобы я мог его скопировать и изменить одну часть?

ответ

3

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

def create 
    super do |format| 
    redirect_to admin_submission_discussion_path(id: resource.discussion.slug, submission_id: resource.discussion.client_application.slug) and return if resource.valid? 
    end 
end 
+1

Спасибо! Раньше я делал что-то подобное, но получал двойную ошибку переадресации, потому что мое перенаправление добавлялось к родительскому контроллеру, а не заменяло его перенаправление. Кажется, что добавление 'и return if resource.valid?' - это то, что исправляет его для меня. Вы знаете, почему это имеет значение? – sixty4bit

Смежные вопросы