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 |