Does not work with nested fields
sedubois opened this issue · comments
This gem looks helpful to solve the issue described in codica2/administrate-field-jsonb#1, thanks!
However it does not seem to support nested fields. I have a Post dashboard configured as follows (schema was configured by globalize):
# app/dashboards/post_dashboard.rb
class PostDashboard < Administrate::BaseDashboard
ATTRIBUTE_TYPES = {
translations: NestedHasMany.with_options(class_name: "Post::Translation"),
...
}.freeze
...
end
# app/dashboards/post/translation_dashboard.rb
class Post::TranslationDashboard < Administrate::BaseDashboard
ATTRIBUTE_TYPES = {
tags: Field::JSONB,
...
}.freeze
...
end
The aim is to apply deserialize_json_fields
to the tags
field of the post translation.
NB: NestedHasMany
is a modification of Field::NestedHasMany
to support namespaced models, as shown here.
There are two problems:
- the README instructs to define
deserialize_json_fields
on the controller, but bothAdmin::Post::TranslationsController
andAdmin::PostsController
will potentially need to handle the submission oftags
(respectively either being a direct property of the resource associated to the controller, or as a property of the nested sub-resource through the has-many relation) - there is no way with the current syntax to instruct to deserialize the field in the nested resource (which is the scenario I need the most). The transformation should actually be applied not on
tags
, but on the form'stranslations_attributes
value which looks like this:
{
"0"=>{"id"=>"19", "_destroy"=>"false", "locale"=>"en", "tags"=>"[\"in english\"]", ...},
"1"=>{"id"=>"20", "_destroy"=>"false", "locale"=>"fr", "tags"=>"[\"en français\"]", ...}
}
I think I understand the issue. Basically I don't interpret the nested fields correctly (because it uses field_attributes
instead of field
)?
there is no way with the current syntax to instruct to deserialize the field in the nested resource (which is the scenario I need the most). The transformation should actually be applied not on tags, but on the form's translations_attributes value which looks like this:
So this is what you really need right?
I'll see what I can do. It might be a while, but I don't mind you nagging me if I seem to have forgotten about it.
Basically I don't interpret the nested fields correctly (because it uses field_attributes instead of field)?
Correct.
So this is what you really need right?
Yes that's the blocking point; and also there should also be a way to configure this deserialization behaviour in a single place instead of in two different controllers (Admin::PostsController
and Admin::Post::TranslationsController
).