Ruby · Intermediário · Inglês · Técnico
concern
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
endExemplos
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