Problema listar estudiantes relacionados a un usuario logueado

8 views
Skip to first unread message

Freddy Cipamocha Triana

unread,
Jan 15, 2017, 5:09:30 PM1/15/17
to Las Palmas On Rails

Tengo una aplicación para registrar reportes de los estudiantes de un colegio, el usuario (rector o coordinador) crea los estudiantes,  en la tabla de estudiantes (student) se almacena el id del colegio (college_id) y el id del usuario (officer_id).

Estoy intentando  que cuando el usuario (officer) ingrese vea solo los estudiantes que registro y que corresponden al mismo colegio.

 

Intente pero muestra todos los estudiantes registrados, y no filtra los estudiantes   que corresponden al usuario:

 

¿Cómo puedo mostrar en index.html.erb solo los estudiantes que el rector o coordinador creo y  que corresponden al mismo colegio?

 

 

Gracias de antemano.

 ------------------------------------------------------

Modelos

 

class Officer <ActiveRecord::Base

  # Include default devise modules. Others available are:

# :confirmable, :lockable, :timeoutable and :omniauthable

devise :database_authenticatable, :registerable,

:recoverable, :rememberable, :trackable, :validatable

 

belongs_to :college

has_many :students

 

includePermissionsConcern

 

end

 

class Student <ActiveRecord::Base

                belongs_to :officer

                belongs_to :college

               

end

 

----------------------------------------------------------------- 

Controlador:

 

def index

      @students = current_officer.students

 

end

 

----------------------------------------------------------------- 

Vista index.html.erb:

 

<table class="table table-condensed table-striped">

<tr>

<td class="success">Documento</td>

<td class="success">NombreCompleto</td>

<td class="success">Grado</td>

<td class="success">Colegio</td>

<td class="success">Rector</td>

</tr>

 

<% @students.each do |student| %>

<tr>

<td><%= student.documento %></td>

<td><%= student.nombres %><%= student.apellidos %></td>

<td><%= student.grado %></td>

<td><%= student.college.nombre %></td>

<td><%= student.officer.nombres %><%= student.officer.apellidos %></td>

 

<td><%= link_to "CrearReporte", {controller: "students", action: "show",:id => student.id}, class: "btnbtn-info" %>

<td><%= link_to "EditarDatos", {controller: "students", action: "edit",:id => student.id}, class: "btnbtn-success" %>

</td>

</tr>

 

<% end %>

</table>


En la imagen se listan los estudiantes registrados, allí se muestra un estudiante del colegio II, que no debería mostrar, solo deberían mostrarse estudiantes del colegio I. 


 

Alfonso García

unread,
Jan 15, 2017, 5:38:11 PM1/15/17
to las-palma...@googlegroups.com
Student.where(officer_id: id_officer_que_se_quiere_consultar) o Student.where (officer: objeto_officer_que_se_quiere_consultar)

Saludos

Enviado desde mi iPhone
--
Has recibido este mensaje porque estás suscrito al grupo "Las Palmas On Rails" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a las-palmas-on-r...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a las-palma...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/las-palmas-on-rails.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Ángel García Pérez

unread,
Jan 16, 2017, 7:51:30 AM1/16/17
to las-palma...@googlegroups.com
También puedes usar scopes para tener la consulta a mano por si la necesitas en más lugares o por si la tuvieras que modificar en un futuro.

Otra opción es poner en el modelo Officer un has_many :students que tenga en cuenta las condiciones para filtrar (:conditions)

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a las-palmas-on-rails+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a las-palmas-on-rails@googlegroups.com.

Visita este grupo en https://groups.google.com/group/las-palmas-on-rails.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "Las Palmas On Rails" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a las-palmas-on-rails+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a las-palmas-on-rails@googlegroups.com.

Visita este grupo en https://groups.google.com/group/las-palmas-on-rails.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Atentamente:
Ángel García Pérez.

Moisés Déniz Alemán

unread,
Jan 16, 2017, 6:03:46 PM1/16/17
to las-palma...@googlegroups.com
En base a tu código realmente con hacer un where con el college_id al recuperar los estudiantes en el controlador tendrías, algo tipo:

@students = current_officer.students.where(college: current_officer.college)

También realmente podrías partir del college, pero sería algo parecido:

@students = current_officer.college.students.where(officer: current_officer)

Como bien dice Ángel puedes crear unos scopes para reusarlos si es necesario.

Saludos

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a las-palmas-on-rails+unsubscribe...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a las-palmas-on-rails@googlegroups.com.
Visita este grupo en https://groups.google.com/group/las-palmas-on-rails.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "Las Palmas On Rails" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a las-palmas-on-rails+unsubscribe...@googlegroups.com.

Para publicar en este grupo, envía un correo electrónico a las-palmas-on-rails@googlegroups.com.
Visita este grupo en https://groups.google.com/group/las-palmas-on-rails.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Atentamente:
Ángel García Pérez.

--
Has recibido este mensaje porque estás suscrito al grupo "Las Palmas On Rails" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a las-palmas-on-rails+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a las-palmas-on-rails@googlegroups.com.
Visita este grupo en https://groups.google.com/group/las-palmas-on-rails.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Salu2

Freddy Cipamocha Triana

unread,
Jan 17, 2017, 10:03:47 AM1/17/17
to Las Palmas On Rails
Gracias, voy a probar las opciones propuestas.

Un saludo.

Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a las-palmas-on-rails+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a las-palma...@googlegroups.com.

Visita este grupo en https://groups.google.com/group/las-palmas-on-rails.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "Las Palmas On Rails" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a las-palmas-on-rails+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a las-palma...@googlegroups.com.

Visita este grupo en https://groups.google.com/group/las-palmas-on-rails.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Atentamente:
Ángel García Pérez.

--
Has recibido este mensaje porque estás suscrito al grupo "Las Palmas On Rails" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a las-palmas-on-rails+unsub...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a las-palma...@googlegroups.com.

Visita este grupo en https://groups.google.com/group/las-palmas-on-rails.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Salu2
Reply all
Reply to author
Forward
0 new messages