Guías de Make it Real
Search…
Introduction
Preparación
Git
HTML y CSS
Bootstrap 3
Bootstrap 4
Ruby
Programación Orientada a Objetos en Ruby
JavaScript I
JavaScript en el navegador
jQuery
JavaScript II
HTTP y Sinatra
Bases de datos
Ruby on Rails I
Primeros pasos
Arquitectura
Rutas
Layouts y rendering
ActiveRecord - Modelos
ActiveRecord - Migraciones
ActiveRecord - Validaciones
ActiveRecord - Asociaciones
ActiveRecord - Scopes
ActiveRecord - Callbacks
Recursos REST
Formularios
Autenticación con Devise
Sass y Bootstrap
Envío de correos
Carga de imágenes
Seeds
Heroku
Ruby on Rails II
Express.js
Express.js II
React
Redux
Algoritmos
Python
NumPy
Pandas
Powered By
GitBook
ActiveRecord - Scopes
Los
scopes
te permiten definir consultas frecuentes como métodos que puedes invocar sobre los modelos o asociaciones.
Para definir un
scope
utiliza el método
scope
en la clase del modelo pasando la consulta que quieres que se ejecute cuando utilizan el
scope
:
1
class
Article
<
ApplicationRecord
2
scope
:published
,
->
{
where
(
published
:
true
)
}
3
end
Copied!
Esto es equivalente a utilizar un método de clase:
1
class
Article
<
ApplicationRecord
2
def
self
.
published
3
where
(
published
:
true
)
4
end
5
end
Copied!
Para utilizar el
scope
lo invocas sobre la clase
Article
o sobre alguna asociación:
1
published_articles
=
Article
.
published
2
3
# asumiendo que existe un modelo User que tiene una asociación a Article
4
user
=
User
.
first
5
published_articles
=
user
.
articles
.
published
Copied!
Los
scopes
se pueden encadenar. Por ejemplo, si tenemos dos
scopes
en nuestra clase
Article
:
1
class
Article
<
ApplicationRecord
2
scope
:published
,
->
{
where
(
published
:
true
)
}
3
scope
:popular
,
->
{
where
(
'views > ?'
,
10
)
}
4
end
Copied!
Los puedes encadenar de la siguiente forma:
1
articles
=
Article
.
published
.
popular
Copied!
Argumentos
Los
scopes
pueden recibir argumentos.
Por ejemplo:
1
class
Article
<
ApplicationRecord
2
scope
:created_before
,
->
(
time
)
{
where
(
"created_at < ?"
,
time
)
}
3
end
Copied!
Un
scope
con argumentos se invoca como si fuera un método de clase:
1
Article
.
created_before
(
Time
.
zone
.
now
)
Copied!
Recuerda que el
scope
se puede escribir también como un método de clase:
1
class
Article
<
ApplicationRecord
2
def
self
.
created_before
(
time
)
3
where
(
"created_at < ?"
,
time
)
4
end
5
end
Copied!
Previous
ActiveRecord - Asociaciones
Next
ActiveRecord - Callbacks
Last modified
4yr ago
Copy link
Contents
Argumentos