ExpertiDict

Ruby · Intermediário · Inglês · Técnico

concern

/ˈkɑnsɝn/substantivo

Módulo do Rails que estende ActiveSupport::Concern para empacotar comportamento reutilizável de models e controllers. Permite declarar included e class_methods sem o gancho manual.

Onde usar

Aparece em app/models/concerns para dividir models gordos, como Taggable ou Auditavel. Funciona bem para comportamento coeso e mal quando vira gaveta de código solto.

Em código

module Auditavel
  extend ActiveSupport::Concern
  included { has_many :logs, as: :auditavel }
  class_methods do
    def recentes = order(updated_at: :desc)
  end
end

Exemplos

Move the tagging logic into a concern.

Mova a lógica de tags para um concern.

A concern should have one cohesive purpose.

Um concern deve ter um propósito coeso.

Cuidado

Não o use só para esconder um model grande em arquivos menores sem coesão: a complexidade continua lá, apenas espalhada.

Sinônimos

ActiveSupport::Concern

Veja também

Todos os termos de Ruby