Field Discovery
discover_columns and discover_associations automatically detect and configure fields for your Avo resources based on your model's database structure.
# app/avo/resources/user.rb
class Avo::Resources::User < Avo::BaseResource
# ...
def fields
discover_columns
discover_associations
end
endOptions
-> only
Specify which fields should be discovered, excluding all others.
# app/avo/resources/post.rb
class Avo::Resources::Post < Avo::BaseResource
# ...
def fields
discover_columns only: [:title, :body, :published_at]
discover_associations only: [:author, :comments]
end
endDefault value
nil
Possible values
Array of symbols representing column or association names
-> except
Specify which fields should be excluded from discovery.
# app/avo/resources/post.rb
class Avo::Resources::Post < Avo::BaseResource
# ...
def fields
discover_columns except: [:metadata, :internal_notes]
discover_associations except: [:audit_logs]
end
endDefault value
nil
Possible values
Array of symbols representing column or association names
-> column_names_mapping
Override how specific column names are mapped to field types globally.
# config/initializers/avo.rb
Avo.configure do |config|
# ...
config.column_names_mapping = {
published_at: { field: :date_time, timezone: 'UTC' },
role: { field: :select, enum: -> { User.roles } }
}
endDefault value
{}
Possible values
Hash mapping column names to field configurations
-> column_types_mapping
Override how database column types are mapped to field types globally.
# config/initializers/avo.rb
Avo.configure do |config|
# ...
config.column_types_mapping = {
jsonb: { field: :code, language: 'json' },
decimal: { field: :number, decimals: 2 }
}
endDefault value
{}
Possible values
Hash mapping database column types to field configurations
Examples
Basic Discovery
# app/avo/resources/user.rb
class Avo::Resources::User < Avo::BaseResource
# ...
def fields
discover_columns
discover_associations
end
endCustom Field Options
This will add the provided options to every discovered field or association. This is particularly useful when having duplicative configurations across many fields.
# app/avo/resources/post.rb
class Avo::Resources::Post < Avo::BaseResource
# ...
def fields
discover_columns help: "Automatically discovered fields"
discover_associations searchable: false
end
endCombining Manual and Discovered Fields
# app/avo/resources/project.rb
class Avo::Resources::Project < Avo::BaseResource
# ...
def fields
field :custom_field, as: :text
discover_columns except: [:custom_field]
discover_associations
field :another_custom_field, as: :boolean
end
endAutomatic Type Mapping
Field discovery maps database column types to Avo field types automatically. e.g.
string→:textinteger→:numberfloat→:numberdatetime→:datetimeboolean→:booleanjson/jsonb→:code
The full, up-to-date list can be found here
Association Discovery
The following associations are automatically configured:
belongs_to→:belongs_tohas_one→:has_onehas_many→:has_manyhas_one_attached→:filehas_many_attached→:fileshas_rich_text→:trixacts-as-taggable-on :tags→:tags
The full, up-to-date list can be found here
Friendly.rb - Your friendly European Ruby Conference