Customizing Metadata Tutorial: Understanding the Controller
This tutorial assumes that you generated a work type name GenericWork. If you used a different name, substitute that name for all occurrences of GenericWork and generic_work.
The GenericWorksController class is generated with some default behaviors. It is located at app/controllers/curation_concerns/generic_works_controller.rb
# Generated via
# `rails generate hyrax:work GenericWork`
module Hyrax
class GenericWorksController < ApplicationController
# Adds Hyrax behaviors to the controller.
include Hyrax::WorksControllerBehavior
include Hyrax::BreadcrumbsForWorks
self.curation_concern_type = GenericWork
end
end
As usual, you can add code for special processing to the controller. The controllerās main purpose is to connect it to other classes that define the model, set up forms, and display show pages.
Files defined by the controllerā¦
Model class
The model class, which is part of the standard Rails Model-View-Controller, has its name determined by Rails convention.
model_name = controller_name minus 'Controller'
(e.g. GenericWork)
Form class
The form class is used to control how metadata appears on the new/edit work form. A form class is created for each work type when the work type is generated. The controller knows about this class through the work_form_service.rb form_class method.
Default: form_class = model_name.name + Form (e.g. GenericWorkForm)
Modifying: You can change the class that is used as the form class by setting it in the controller.
self.form_class = GenericWorkExtForm # UNCOMMON, see note below.
It is uncommon to set self.form_class as the form class is already generated (e.g. GenericWorkForm) and can hold your extensions.
Presenter class
The presenter class is used to control how metadata appears on the work show page. This class is NOT generated. See Modifying the Show Page for more information on creating a presenter class. The default presenter class is defined in works_controller_behavior.rb
Default: show_presenter = Hyrax::WorkShowPresenter
Modifying: You can change the class that is used as the presenter class by setting it in the controller.
self.show_presenter = GenericWorkPresenter