Class: RuboCop::Cop::Captive::Rails::NoHasManyAttached
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Captive::Rails::NoHasManyAttached
- 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 |