Class: RuboCop::Cop::Captive::Rails::NoHasManyAttached

Inherits:
Base
  • Object
show all
Defined in:
lib/rubocop/cop/captive/rails/no_has_many_attached.rb

Overview

Interdit l'utilisation de has_many_attached (Active Storage) dans les modèles Rails.

À chaque utilisation de has_many_attached, on finit par avoir besoin d'informations supplémentaires sur les fichiers (image de couverture, position, ordre, etc.), ce qu'on ne peut pas faire avec des blobs seuls. Par exemple, un produit avec has_many_attached :images permet d'afficher la première image en couverture, mais si cette image s'avère être une grille de tailles et qu'on veut en choisir une autre, c'est impossible : les pièces jointes sont de simples blobs sans attributs métier.

La solution recommandée est d'utiliser un modèle associé (ex. Photo) avec has_one_attached :file et des attributs (position, type, etc.). Cela évite une migration coûteuse plus tard pour faire passer des millions d'images de blobs à un vrai modèle.

Constant Summary collapse

MSG =
"N'utilisez pas `has_many_attached`. Préférez un modèle associé avec " \
"`has_one_attached` pour pouvoir ajouter des attributs " \
"(position, image de couverture, etc.)."

Instance Method Summary collapse

Instance Method Details

#on_send(node) ⇒ Object



31
32
33
34
35
# File 'lib/rubocop/cop/captive/rails/no_has_many_attached.rb', line 31

def on_send(node)
  return unless has_many_attached?(node)

  add_offense(node, message: MSG)
end