0

Disons que j'ai certains modèlesRails portée Modèle chaînage basé sur la liste des noms de champ dynamique

class MyModel < ApplicationRecord 
    scope :opened, -> { where(status: 'open') } 
    scope :closed, -> { where(status: 'closed') } 
    scope :colored, -> { where.not(color: nil) } 
    # etc 
end 

Je peux appeler les chaînes de portée comme

MyModel.opened.colored 
MyModel.send('opened').send('colored') 

Mais comment puis-je faire la portée chaînage en fonction de la portée dynamique liste des jetons? Je veux dire

scopes = ['opened', 'colored', ...] 

La liste peut être très longue et j'ai besoin de solution générale pour le faire aussi simple que possible, comme MyModel.send_list(scopes).

Répondre

1

Plus à la suite de la portée, vous pouvez ajouter comme,

scope :send_list, -> (*scopes) { scopes.inject(self) { |out, scope| out.send(scope) } } 

Envoyer cette YourModel.send_list(*scopes) comme