Champ d'application et portée dans les rails
Quelqu'un peut-il expliquer en quoi cette méthode et ce que je peux passer?
scoped(options = nil)
Returns an anonymous scope.
Et aussi ce que le champ d'application de la méthode? Je ne comprends pas, après lecture de la documentation.
source d'informationauteur LuckyLuke
Vous devez vous connecter pour publier un commentaire.
Dans ActiveRecord, toutes les requêtes des méthodes de construction (comme
where
order
joins
limit
et ainsi de suite) retour un soi-disant portée. Seulement lorsque vous appelez une bosse méthode commeall
oufirst
la requête est exécutée et les résultats de la base de données sont renvoyés.La
scoped
méthode de classe renvoie également un champ d'application. Le champ d'application retourné par défaut est vide de sens le résultat ne sera pas limité dans tous les sens tous les dossiers seront retournés si la requête a été exécutée.Vous pouvez l'utiliser pour donner un "vide", comme alternative à la query_by_date exemple par MurifoX.
Ou vous pouvez l'utiliser pour combiner plusieurs en un seul appel de méthode, comme par exemple:
La
scope
méthode de classe permet de définir une méthode de classe qui retourne également un champ d'application, comme par exemple:qui peut être utilisée comme ceci:
La bonne chose avec des étendues est que vous pouvez les combiner (presque) comme vous le souhaitez, donc la suite est tout à fait possible:
J'ai aussi recommandons fortement de lire http://guides.rubyonrails.org/active_record_querying.html
Je l'ai utilisé dans le passé.Quand vous faites enchaîné les appels à la
ActiveRecord
interface de requête comme ceci:Chacun d'entre eux est déjà étendue, rendant le travail à la chaîne sans aucun problème. Mais disons que vous avez quelque chose comme ceci:
Ce serait provoquer une erreur si le paramètre date n'est pas aujourd'hui ou demain. Il allait chercher la dernière valeur et d'essayer de chaîne de requête à la prochaine
query_by_user
résultant en uneundefined method default_scoped? for ''
. Mais si vous mettez unscoped
méthode dans leelse
condition, ce serait sans aucun défauts, parce que vous dites à activerecord que vous transmettez par le biais de cette méthode/named champ d'application et n'a pas tous les appels àwhere/find/other activerecord methods
mais retourne un objet compris dans l'étendue, de sorte que vous pouvez continuer le chaînage des requêtes et des trucs.Il serait de cette façon à la fin.
Espère que vous comprenez ce simple exemple.