I'm creating an Admin page for my model i noticed that if there are errors in your new and edit forms the /new is removed from URL
for example if my url was /my_model/new
On error it is changed to /my_model
Is there any way to fix this because I'm writing custom javascript based upon the url if it's new do something if it's edit do something else
Please let me know if anyone knows a fix
Update:
i should've have provided more info what I'm doing and what's causing the issue so I have a model for which I'm creating an admin page using the ActiveAdmin gem
here is my model
class Task < ApplicationRecord
validates :count, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 99 }, allow_nil: true
end
and my active admin page looks something like this:
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
so when you open up a Item or try to create or update a Task the URL goes to either /admin/tasks/new or /admin/tasks/edit
so I need to make some changes using JQuery based upon the URL so I made a script for this which looks something like:
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
}
So now the issue occurs when lets say i enter a value of count in my input which is not valid there is an error in my form which is shown perfectly but the weird thing that happens is as soon as there is an error the url switches from:
/admin/tasks/new to just /admin/tasks (same for edit)
This was a mistake on my end I was only thinking to just make my javascript work as I was only associating the new and edit form with the URL , but that's not ActiveAdmin handles form creation and updation, as in rails if a form is not valid we render the form again and send it as the response to an invalid form submission.
Keeping this in mind and reading more about this I found out that ActiveAdmin updates the body
element of the DOM to let the server know which form it is.
Next the only thing needed was to update my javascript to handle this, here is the final javascript
var bodyClassList = document.body.classList;
if ( bodyClassList.contains("edit") || bodyClassList.contains("new") ||
bodyClassList.contains("update") || bodyClassList.contains("create") ) {
// do something
}