Recientemente comencé una pasantía. Mi empleador usa ruby on rails y con frecuencia encuentro una nueva sintaxis que necesito buscar para comprender. Busqué en Google una buena explicación de named_scope, pero lo que he encontrado hasta ahora son principalmente publicaciones de blog que lo elogian, más bien una definición o introducción directa.
¿Qué es exactamente named_scope (ahora simplemente llamado alcance) en ruby on rails?
ruby-on-rails
named-scope
Ziggy
fuente
fuente
Respuestas:
Un ámbito es un subconjunto de una colección. ¿Suena complicado? No lo es. Imagina esto:
Tienes usuarios. Ahora, algunos de esos usuarios están suscritos a su boletín. Marcó a aquellos que reciben un boletín agregando un campo a la Base de datos de usuarios (user.subscriptions_to_newsletter = true). Naturalmente, a veces desea obtener aquellos Usuarios que están suscritos a su boletín.
Por supuesto, siempre puedes hacer esto:
Sin embargo, en lugar de escribir esto siempre, podrías hacer algo como esto.
Si está usando Rails 4 o más reciente , haga esto en su lugar:
Esto le permite acceder a sus suscriptores simplemente haciendo esto:
Este es un ejemplo muy simple pero, en general, los alcances pueden ser herramientas muy poderosas para facilitar su trabajo.
Consulte este enlace: Descripción de API
fuente
scope
sintaxis es mucho más limpia, obtienes el mismo resultado pero con solo una líneaEl alcance en el registro activo es como los métodos de clase pero devuelven el objeto Relación, lo que significa que puede llamar a otro alcance o método de consulta de registro activo en él.
Por ejemplo, si tiene un modelo Zombie (tabla de zombies) con los métodos de alcance mencionados a continuación,
Y tu llamas
Se traduce a lo siguiente en SQL,
El ejemplo anterior se basa en la sintaxis de rails 4
fuente
scope :recent, -> { order(created_at: :desc) }
? apidock.com/rails/v4.2.9/ActiveRecord/QueryMethods/orderLa mejor manera de comprender los detalles es ir a la Documentación de API.
Obtendrá los detalles completos y las formas en que podemos usar Scopes.
Documentación API del alcance
fuente
¿Por qué usarlos?
El alcance le permite especificar consultas de uso común (se puede considerar como un acceso directo para consultas largas o de uso más frecuente) a las que se puede hacer referencia como llamadas a métodos en los objetos o modelos de asociación. Con estos ámbitos, puede utilizar todos los métodos cubiertos anteriormente, como dónde, se une e incluye. Todos los métodos de alcance devolverán un objeto ActiveRecord :: Relation que permitirá que se invoquen más métodos (como otros ámbitos).
Para definir un alcance simple, usamos el método de alcance dentro de la clase, pasando la consulta que nos gustaría ejecutar cuando se llama a este alcance:
Esto es exactamente lo mismo que definir un método de clase, y el que use es una cuestión de preferencia personal:
Siga el siguiente enlace para obtener una descripción completa con un ejemplo. Espero que esto ayude.
http://guides.rubyonrails.org/active_record_querying.html
fuente
nil
en pocos casos y, por lo tanto, no se pueden encadenar en determinadas condiciones.Ahora imagínate:
¡Podrías obtener esas clases particulares de personas usando un visor!
Ahora que no fue tan difícil, ¿verdad?
fuente