Rails ActiveAdmin - 更改更新后的redirect_to

时间:2012-01-28 19:21:15

标签: ruby-on-rails activeadmin

我有一个属于Car页面的Feature页面。除了一件事,这正是我想要的。

创建,更新或销毁后,我希望将网页重定向到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

6 个答案:

答案 0 :(得分:37)

正确的更新代码,无需跳过验证

controller do
  def update
    super do |success,failure|
      success.html { redirect_to collection_path }
    end
  end
end

答案 1 :(得分:22)

以下是针对您的案例的更新操作的代码。此代码转到features.rb - admin文件:

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

这会重定向到汽车索引页面。所以你有这个想法。对于创建和销毁操作也是如此。

答案 2 :(得分:9)

目前,接受的答案会导致忽略验证错误。

这适用于最新版本的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  

答案 3 :(得分:0)

Marcelo,我不确定我是否理解您的问题,但是不会将其放入控制器中的updatecreatedestroy操作中吗?

 format.html { redirect_to redirect_address }

并根据需要制作redirect_address

答案 4 :(得分:0)

当前答案是跳过验证。其他一些答案有效,但部分正确(错误使用super或手动验证资源)。

在创建和udpate之后,使用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

答案 5 :(得分:0)

这是一个也可以与create_another一起使用的解决方案,使用parentchild作为模型名称。

此解决方案假定您将孩子显示为父母的一部分(例如,通过table_for),因此您不需要孩子的index方法。

在资源覆盖控制器的smart_resource_urlindex方法中:

  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