Feature #16646
Allow Foreman controllers to be extended to include fields from external plugins
Description
Problem:
If an external plugin, such as Katello, uses database fields in a view that Foreman prepares in a Foreman controller, additional database queries are run from the view layer as the fields or related tables are requested. In index views, this issue causes N+1 query warnings as the view iterates over each object.
Proposed solution:
Allow index actions to be extended per-controller to use a private class method which provide additional fields to pass to the ActiveRecord::Relation#includes method.
Example:
class HostsController class << self do def index_fields @index_fields ||= {} end def include_index_field(field_hash) index_fields.merge!(field_hash) end end def index @hosts = Host.includes(self.class.index_fields) end end
Related issues
Associated revisions
History
#1
Updated by Andrew Kofink over 5 years ago
- Related to Bug #16010: "Error: Request Timeout" from hammer when asked to show >400 content hosts added
#2
Updated by Dominic Cleal over 5 years ago
- Category set to Plugin integration
- Status changed from New to Assigned
#3
Updated by Shimon Shtein over 5 years ago
- Target version set to 127
#4
Updated by The Foreman Bot over 5 years ago
- Status changed from Assigned to Ready For Testing
- Pull request https://github.com/theforeman/foreman/pull/3887 added
#5
Updated by Ivan Necas over 5 years ago
- Target version changed from 127 to 1.5.1
#6
Updated by Ivan Necas over 5 years ago
- Target version changed from 1.5.1 to 1.4.1
#7
Updated by Lukas Zapletal over 5 years ago
- Related to Refactor #17085: Make use of index scope DSL added
#8
Updated by Shimon Shtein over 5 years ago
- Status changed from Ready For Testing to Closed
- % Done changed from 0 to 100
Applied in changeset 87f8f03ea2f470076e8e7904c4f419833e81b5f0.
#9
Updated by Dominic Cleal over 5 years ago
- Legacy Backlogs Release (now unused) set to 189
Fixes #16646 - Add ability to plugins to modify index scope