J'ai récemment commencé un stage. Mon employeur utilise ruby on rails et je rencontre souvent une nouvelle syntaxe que je dois rechercher pour comprendre. J'ai cherché sur Google une bonne explication de named_scope, mais ce que j'ai trouvé jusqu'à présent, ce sont principalement des articles de blog qui en font l'éloge, plutôt une définition ou une introduction simple.
Qu'est-ce que named_scope (maintenant simplement appelé scope) dans ruby on rails?
Réponses:
Une étendue est un sous-ensemble d'une collection. Cela semble compliqué? Ça ne l'est pas. Imagine ça:
Vous avez des utilisateurs. Désormais, certains de ces utilisateurs sont abonnés à votre newsletter. Vous avez marqué ceux qui reçoivent une newsletter en ajoutant un champ à la base de données des utilisateurs (user.subscribed_to_newsletter = true). Naturellement, vous souhaitez parfois obtenir les utilisateurs qui sont abonnés à votre newsletter.
Vous pouvez, bien sûr, toujours faire ceci:
Au lieu de toujours écrire ceci, vous pouvez cependant faire quelque chose comme ceci.
Si vous utilisez Rails 4 ou plus récent , procédez comme suit:
Cela vous permet d'accéder à vos abonnés en faisant simplement ceci:
Ceci est un exemple très simple, mais en général, les portées peuvent être des outils très puissants pour faciliter votre travail.
Consultez ce lien: Description de l'API
la source
scope
syntaxe est beaucoup plus propre, vous obtenez le même résultat mais avec une seule ligneLa portée dans l'enregistrement actif est comme les méthodes de classe, mais elles renvoient un objet Relation, ce qui signifie que vous pouvez appeler une autre portée ou une autre méthode d'interrogation d'enregistrement actif dessus.
Par exemple, si vous avez un modèle Zombie (table zombies) avec les méthodes de portée mentionnées ci-dessous,
Et tu appelles
Cela se traduit par ce qui suit en SQL,
L'exemple ci-dessus est basé sur la syntaxe de rails 4
la source
scope :recent, -> { order(created_at: :desc) }
? apidock.com/rails/v4.2.9/ActiveRecord/QueryMethods/orderLa meilleure façon de comprendre les détails est d'accéder à la documentation de l'API.
Vous obtiendrez tous les détails et la manière dont nous pouvons utiliser Scopes.
Documentation API de la portée
la source
Pourquoi les utiliser?
La portée vous permet de spécifier des requêtes couramment utilisées (elle peut être considérée comme un raccourci pour les requêtes longues ou les plus fréquemment utilisées) qui peuvent être référencées comme des appels de méthode sur les objets ou modèles d'association. Avec ces étendues, vous pouvez utiliser toutes les méthodes précédemment couvertes telles que where, join et includes. Toutes les méthodes d'étendue renverront un objet ActiveRecord :: Relation qui permettra d'appeler d'autres méthodes (telles que d'autres étendues).
Pour définir une portée simple, nous utilisons la méthode scope à l'intérieur de la classe, en passant la requête que nous aimerions exécuter lorsque cette portée est appelée:
C'est exactement la même chose que la définition d'une méthode de classe, et que vous utilisez est une question de préférence personnelle:
Veuillez suivre le lien suivant pour une description complète avec un exemple. J'espère que cela t'aidera.
http://guides.rubyonrails.org/active_record_querying.html
la source
nil
dans quelques cas, et ne peuvent donc pas être chaînées dans certaines conditions.Imaginez maintenant:
Vous pouvez obtenir ces classes particulières de personnes en utilisant une portée!
Ce n'était pas si difficile, n'est-ce pas?
la source