ruby-on-rails 当ActiveAdmin表单中出现错误时,将从URL中删除/new

c2e8gylq  于 2023-10-21  发布在  Ruby
关注(0)|答案(1)|浏览(148)

我正在为我的模型创建一个管理页面,我注意到如果在您的新表单和编辑表单中存在错误,则会从URL中删除/new
例如,如果我的URL是/my_model/new
如果出现错误,则将其更改为/my_model
有什么办法来解决这个问题,因为我写的自定义JavaScript的基础上的网址,如果它是新的做一些事情,如果它的编辑做其他事情
如果有人知道怎么修复请告诉我
更新:
我应该提供更多的信息,我在做什么,是什么导致了这个问题,所以我有一个模型,我正在创建一个管理页面使用ActiveAdmin宝石
这是我的模型

class Task < ApplicationRecord
    validates :count, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 99 }, allow_nil: true
  end

我的管理页面看起来像这样:

ActiveAdmin.register Task, as: "Tasks" do
  actions :all, except: [:destroy]
  menu label: "Tasks", parent: "Tasks Menu"

  permit_params :name, :count
  
  index do
    id_column
    column :name
    column :count
  end

  show do
    tabs do
      tab :basic do
        attributes_table do
          row :name
          row :count
        end
      end
    end
  end

  form do |f|
    f.semantic_errors *f.object.errors.keys

    f.inputs "Basic Details" do
      f.input :name     
      f.input :count

      f.actions
    end
  end
end

因此,当您打开一个项目或尝试创建或更新任务时,URL将转到/admin/tasks/new或/admin/tasks/edit
所以我需要根据URL使用JQuery做一些修改,所以我为此做了一个脚本,看起来像这样:

var window_location_elements = location.href.split("/");
var length = window_location_elements.length;

if(window_location_elements[length-1] === "edit" || window_location_elements[length-1] === "new"){
  // do something
}

所以现在问题发生了,当我们说我在我的输入中输入了一个无效的count值时,我的表单中有一个错误,它被完美地显示出来,但奇怪的是,一旦出现错误,URL就会切换:
/admin/tasks/new to just /admin/tasks(编辑时相同)

owfi6suc

owfi6suc1#

这是我的一个错误,我只是想让我的JavaScript工作,因为我只是将新建和编辑表单与URL相关联,但这不是ActiveAdmin处理表单创建和更新,因为在Rails中,如果表单无效,我们会再次呈现表单并将其作为无效表单提交的响应发送。
记住这一点,并阅读更多关于这一点,我发现ActiveAdmin更新DOM的body元素,让服务器知道它是哪种形式。
接下来唯一需要做的就是更新我的JavaScript来处理这个问题,这是最终的javascript。

var bodyClassList = document.body.classList;

if ( bodyClassList.contains("edit") || bodyClassList.contains("new") ||
      bodyClassList.contains("update") || bodyClassList.contains("create") ) {
   // do something
}

相关问题