Skip to content

Custom file placements (single)

Petr Marek edited this page Jan 14, 2019 · 1 revision

Let's create a catalogue placement for Folio::Site in MyProject.

Create a model

Use folio_image_placement for Folio::Image placements and folio_document_placement for Folio::Document placements.

# app/models/my_project/catalogue_placement.rb

class MyProject::CataloguePlacement < Folio::FilePlacement::Base
  folio_document_placement :catalogue_placement
end

Create/modify a site decorator

# app/decorators/models/folio/site_decorator.rb

Folio::Site.class_eval do
  include Folio::HasAttachments

  has_one_placement(:catalogue, placement: 'MyProject::CataloguePlacement')
end

has_one_placement creates two relations - has_one :catalogue_placement and has_one :catalogue, through: :catalogue_placement

Add the key to console base controller decorator

# app/decorators/controllers/folio/console/base_controller_decorator.rb

Folio::Console::BaseController.class_eval do
  private

    def additional_file_placements_strong_params_keys
      %i[
        catalogue_placement_attributes
      ]
    end
end

Add attribute translation

# config/locales/activerecord.cs.yml

---
cs:
  activerecord:
    attributes:
      folio/site:
        catalogue_placement: Katalog

Add the form field to view

Use the react_picker helper.

/ app/views/folio/console/sites/_additional_form_fields.slim

= react_picker f, :catalogue_placement, \
                  file_type: 'Folio::Document', \
                  title: Folio::Site.human_attribute_name(:catalogue_placement)

Clone this wiki locally