Boolean Group

The BooleanGroup
is used to update a Hash
with string
keys and boolean
values in the database.
It's useful when you have something like a roles hash in your database.
DB payload example
An example of a boolean group object stored in the database:
{
"admin": true,
"manager": true,
"writer": true,
}
Field declaration example
Below is an example of declaring a boolean_group
field for roles that matches the DB value from the example above:
field :roles,
as: :boolean_group,
name: "User roles",
options: {
admin: "Administrator",
manager: "Manager",
writer: "Writer"
}
-> options
The options
attribute should be a Hash
where the keys match the DB keys and the values are the visible labels.
Default value
Empty Hash
.
{}
Computed options
You may need to compute the options dynamically for your BooleanGroup
field. You can use a lambda for this, which provides access to the record
, resource
, view
, and field
properties where you can pull data off.
# app/avo/resources/project.rb
class Avo::Resources::Project < Avo::BaseResource
field :features,
as: :boolean_group,
options: -> do
record.features.each_with_object({}) do |feature, hash|
hash[feature.id] = feature.name.humanize
end
end
end
The output value must be a hash as described above.
Updates
Before version 3.7.0 Avo would override the whole attribute with only the payload sent from the client.
// Before update.
{
"feature_enabled": true,
"another_feature_enabled": false,
"something_else": "some_value" // this will disappear
}
// After update.
{
"feature_enabled": true,
"another_feature_enabled": false,
}
// Before update.
{
"feature_enabled": true,
"another_feature_enabled": false,
"something_else": "some_value" // this will be kept
}
// After update.
{
"feature_enabled": true,
"another_feature_enabled": false,
"something_else": "some_value"
}