Rails ActiveAdmin - променете redirect_to след актуализация

Имам страница с функции, която принадлежи към страницата за автомобили. Това работи точно както искам, с изключение на едно нещо.

След създаване, актуализиране или унищожаване, искам страницата да бъде пренасочена към admin_car_path(car) вместо стандартните admin_car_feature_path(car,feature) за създаване и актуализиране и admin_car_features_path(car).

Безуспешно го търсих.

ActiveAdmin.register Car do
end

ActiveAdmin.register Feature do
  belongs_to :car
end

TIA


person Marcelo    schedule 28.01.2012    source източник


Отговори (6)


Ето кода за действие за актуализиране за вашия случай. Този код отива към Features.rb - административния файл:

controller do
  def update
    update! do |format|
      format.html { redirect_to admin_cars_path }
    end
  end
end

Това пренасочва към индексната страница на автомобили. Значи имате идеята. Същото за действията за създаване и унищожаване.

person kravc    schedule 22.07.2012
comment
друго добро нещо за този подход: той не отменя грешките при валидиране, които се показват на страницата за редактиране, когато обектът е невалиден (както се страхувах, че може, тъй като блокът не разграничава дали е валиден или не). - person Luke W; 01.02.2013
comment
Вместо format.html { redirect_to admin_cars_path } можете да използвате общия подход format.html { redirect_to collection_path } - person Alter Lagos; 23.05.2013
comment
Благодаря ви момчета. Съжалявам за късното потвърждение. - person Marcelo; 26.06.2013
comment
този метод всъщност игнорира грешки при валидиране (може би в най-новите версии на active_admin), публикувал съм код, който работи за мен - person nazar kuliyev; 18.03.2014
comment
Получавам тази грешка: development/myproject/app/admin/features.rb:1:in <top (required)>': undefined method controller' за main:Object (NoMethodError) какво правя погрешно? - person G.B; 28.10.2016

правилен код за актуализиране без пропускане на валидиране

controller do
  def update
    super do |success,failure|
      success.html { redirect_to collection_path }
    end
  end
end
person nazar kuliyev    schedule 18.03.2014
comment
Получавам тази грешка: development/myproject/app/admin/features.rb:1:in <top (required)>': undefined method controller' за main:Object (NoMethodError) какво правя погрешно? - person G.B; 28.10.2016
comment
трябва да се постави вътре в ActiveAdmin.register ModelName до крайния блок - person nazar kuliyev; 04.12.2016
comment
Не се препоръчва използването на ключовите думи super в AA (глупаво, знам. DSL прекалява IMO). по същество за това е методът update!. Можете също да направите update! do |success, failure| - person Nick Res; 02.08.2018

В настоящия момент приетият отговор води до игнориране на грешки при валидиране.

Това работи за мен с най-новите версии на ActiveAdmin и Rails:

controller do

  def update
    update! do |format|
      format.html { redirect_to collection_path } if resource.valid?
    end
  end

  def create
    create! do |format|
      format.html { redirect_to collection_path } if resource.valid?
    end
  end

end  
person Anri    schedule 26.02.2014
comment
Получавам тази грешка: development/myproject/app/admin/features.rb:1:in <top (required)>': undefined method controller' за main:Object (NoMethodError) какво правя погрешно? - person G.B; 28.10.2016
comment
Съжалявам, поста е от 2014 г., вече 2 години не съм ползвал ruby. - person Anri; 31.10.2016

Марсело, не съм сигурен, че разбирам въпроса ви, но поставянето на това в действията update, create и destroy във вашия контролер няма ли да свърши работа?

 format.html { redirect_to redirect_address }

И направете redirect_address каквото ви трябва.

person kakubei    schedule 23.04.2012

Текущият отговор е пропускане на валидации. Някои от другите отговори работят, но са частично правилни (неправилно използване на super или ръчно валидиране на ресурс).

Най-актуалният „правилен“ начин за пренасочване с AA след създаване и актуализиране:

controller do
  def create
    create! do |success,failure|
      success.html { redirect_to collection_path, notice: "#{resource.model_name.human} was successfully created." }
    end
  end
  def update
    update! do |success,failure|
      success.html { redirect_to collection_path, notice: "#{resource.model_name.human} was successfully updated." }
    end
  end
end
person rorofromfrance    schedule 25.10.2019

Ето решение, което работи и с create_another, използвайки parent и child за имена на модели.

Това решение предполага, че показвате деца като част от родител (напр. чрез table_for), така че не се нуждаете от метода index на детето.

В методите smart_resource_url и index на контролера за замяна на ресурси:

  controller do
    def smart_resource_url
      if create_another?
        new_resource_url(create_another: params[:create_another])
      else
        parent_path(params[:parent_id])
      end
    end

    def index
      redirect_to parent_path(params[:parent_id])
    end
  end
person Jasper    schedule 17.02.2020