Defining different attributes for `new`/`create` or `edit`/`update` actions without defining `FORM_ATTRIBUTES` makes it crash
Created by: pjmartorell
-
What were you trying to do? Upgraded from
0.13
tomain
(9e462f71). I tried to define different attributes for new/create or edit/update actions as stated here: https://github.com/thoughtbot/administrate/blob/main/docs/customizing_dashboards.md#form-attributesWhen trying to
update
orcreate
a record in the dashboard, there is a crash. This is because, when validating permitted attributes, it's trying to get these attributes fromself.class::FORM_ATTRIBUTES
but it should get them from"FORM_ATTRIBUTES_#{action.upcase}"
asFORM_ATTRIBUTES
is not defined anymore.specific_form_attributes_for(action)
is returningnil
becauseaction
is not being passed inpermitted_attributes
. So the solution is to pass theaction_name
when checking permitted attributes. -
What did you end up with (logs, or, even better, example apps are great!)? The affected code is related with https://github.com/thoughtbot/administrate/pull/1991 Logs:
My workaround: In my
UserDashboard
added the following overrides:def permitted_attributes(action) action = case action when "update" then "edit" when "create" then "new" else action end form_attributes(action).map do |attr| attribute_types[attr].permitted_attribute( attr, resource_class: self.class.model ) end.uniq end def form_attributes(action = nil) specific_form_attributes_for(action) || self.class::FORM_ATTRIBUTES end def specific_form_attributes_for(action) return unless action cname = "FORM_ATTRIBUTES_#{action.upcase}" self.class.const_get(cname) if self.class.const_defined?(cname) end
In my
Admin::UsersController
add the following override:def resource_params params.require(resource_class.model_name.param_key) .permit(dashboard.permitted_attributes(action_name)) .transform_values { |v| read_param_value(v) } end
-
What versions are you running?
- Rails: 6.1.3.1
- administrate (9e462f71)