2012-05-12 14 views
10

Tengo Enquiry y Consellor modelos. Deseo asignar consultas a los consejeros en forma de turno rotativo. Si hay 3 consellors y 5 consultas, a continuación, la asignación debe ser:Asignación por turnos en Ruby

mensaje 1 => C1, Consulta 2 => C2, Consulta 3 => C3, Consulta 4 => C1, mensaje 5 => C2

Puedo hacer esto consultando DB y optimizando mediante el almacenamiento en caché, pero buscando una mejor solución.

Respuesta

14

Matriz # ciclo (un enumerador infinito) es agradable para esto:

counselors = %w(C1 C2 C3).cycle 
enquiries = Array.new(5){|i| "Enquiry #{(i+1).to_s}"} 
enquiries.each{|enq| puts "Do something with #{enq} and #{counselors.next}."} 

salida

Do something with Enquiry 1 and C1. 
Do something with Enquiry 2 and C2. 
Do something with Enquiry 3 and C3. 
Do something with Enquiry 4 and C1. 
Do something with Enquiry 5 and C2. 
+0

Se necesitaría para serializar consejeros en la base de datos para la persistencia y reasignar cada vez que un consejero es creado o destruido – DanS

Cuestiones relacionadas