Forum: Rails-ES Jugar con el "tiempo real"

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
B7de309e2f3436b5b1c0b5c18dad089d?d=identicon&s=25 Carlos Belizón Ibañez (paliyoes)
on 2009-05-13 15:50
Veréis, en mi aplicación (parecida a un PCFútbol pero por internet), los
usuarios juegan partidos con sus equipos, he diseñado la forma de
gestionar y jugarlos de esta:

Se cierran las plantillas -> Se simulan los partidos -> Se hacen
visibles los reportes del partido -> Se pasa a la siguiente jornada ->
Se abren las plantillas.

Bien, mi idea era versátil, al ser todas las acciones accesibles vía web
si eres administrador podías hacer la gestión de las acciones desde
cualquier lugar, pero también me resultaba interesante la idea de
automatizar la tarea.

En un principio pensé en tener 6 scripts distintos que se ejecutarán en
distintas horas mediante cron (por ejemplo):

Cerrar plantillas -> 17 H.
Simular partidos -> 17.30 H.
Hacer visibles los reportes -> 19.00 H.
Siguiente jornada -> 24.00 H.
Abrir plantillas -> 00.30 H.

Bien, mi duda viene a la hora de hacer visibles los reportes, son líneas
de comentarios con las acciones que han sucedido en el partido y en el
minuto en que lo han hecho, un estilo a esto:

match_report(id, match_general_id, minute, action, player_id)

Pues bien, teniendo en cuenta que los partidos se hacen visibles a las
19.00 horas, a las 19.30 deberían de aparecer sólo los match_report que
van en el rango de las 19.00 y los 30 minutos después, ¿Cómo podría
hacer esto?
5c15703984caa012845b3cea129da936?d=identicon&s=25 Manuel González Noriega (Guest)
on 2009-05-13 16:42
(Received via mailing list)
2009/5/13 Carlos Belizón <ruby-forum-incoming@andreas-s.net>

> hacer esto?
>


No me parece haberle entendido bien, pero si los match_reports tienen un
created_at o similar, y por "aparecer" quieres decir hacer un find y
mostrarlos ¿No te sirve restringir el find a los reports creados en la
franja adecuada?
B7de309e2f3436b5b1c0b5c18dad089d?d=identicon&s=25 Carlos Belizón Ibañez (paliyoes)
on 2009-05-13 16:55
Manuel González Noriega wrote:
> 2009/5/13 Carlos Belizón <ruby-forum-incoming@andreas-s.net>
>
>> hacer esto?
>>
>
>
> No me parece haberle entendido bien, pero si los match_reports tienen un
> created_at o similar, y por "aparecer" quieres decir hacer un find y
> mostrarlos ¿No te sirve restringir el find a los reports creados en la
> franja adecuada?

Los match_reports se crean todos muy rapido ya que los partidos cuando
se simulan ejecutan un algoritmo que se ejecuta rápidamente, lo que se
guarda es el minuto "imaginario" en el que ocurre la acción.

Es decir el partido cuando se va mostrar realmente está jugado
completamente pero se muestra "poco a poco" en tiempo real para dar
sensación de realismo. Algo parecido al AS cuando narra un partido por
internet pero teniendo en cuenta que el partido ya está narrado
completamente.
5c15703984caa012845b3cea129da936?d=identicon&s=25 Manuel González Noriega (Guest)
on 2009-05-13 17:18
(Received via mailing list)
2009/5/13 Carlos Belizón <ruby-forum-incoming@andreas-s.net>

>
> Es decir el partido cuando se va mostrar realmente está jugado
> completamente pero se muestra "poco a poco" en tiempo real para dar
> sensación de realismo. Algo parecido al AS cuando narra un partido por
> internet pero teniendo en cuenta que el partido ya está narrado
> completamente.
>

¿Estamos  hablando de la vista? Entonces puedes usar javascript:
precarga
todos los match reports del partido en js y a continuación vete
haciéndolos
visibles uno a uno cada n segundos. Con jQuery o cualquier librería es
bastante trivial.
39086eb3d9a1437276d07c08ea0c3821?d=identicon&s=25 Guillermo (Guest)
on 2009-05-13 19:23
(Received via mailing list)
2009/5/13 Carlos Belizón <ruby-forum-incoming@andreas-s.net>
>
> Es decir el partido cuando se va mostrar realmente está jugado
> completamente pero se muestra "poco a poco" en tiempo real para dar
> sensación de realismo.


Bueno, sigue pudiendo acceder a ellos.

Por un lado haces un name_scope para los que se jueguen.

named_scope :now_playing lambda { {:conditions => {:created_at =>
[(Time.now-1.minute)..(Time.now)] }}}

y luego añades un método.

def playing?
  [(Time.now-1.minute)..(Time.now)].include? self.created_at
end

Y ya tienes esa franja viertual de un minuto.

Aunque igual he entendido mal lo que quieres.
B7de309e2f3436b5b1c0b5c18dad089d?d=identicon&s=25 Carlos Belizón Ibañez (paliyoes)
on 2009-05-14 17:29
Guillermo wrote:
> 2009/5/13 Carlos Belizón <ruby-forum-incoming@andreas-s.net>
>>
>> Es decir el partido cuando se va mostrar realmente está jugado
>> completamente pero se muestra "poco a poco" en tiempo real para dar
>> sensación de realismo.
>
>
> Bueno, sigue pudiendo acceder a ellos.
>
> Por un lado haces un name_scope para los que se jueguen.
>
> named_scope :now_playing lambda { {:conditions => {:created_at =>
> [(Time.now-1.minute)..(Time.now)] }}}
>
> y luego añades un método.
>
> def playing?
>   [(Time.now-1.minute)..(Time.now)].include? self.created_at
> end
>
> Y ya tienes esa franja viertual de un minuto.
>
> Aunque igual he entendido mal lo que quieres.

Sí, por desgracia me has entendido mal, veamos vuelvo a explicar mi
idea.

Tengo las siguientes clases:

round(id, season_id, flag_simulated, date_start, number) (Jornadas)
match_general(id, round_id, local, guest) (Datos generales del partido)
match_report(match_general_id, player_id, club_id, action, player_id,
club_id) (Sucesos del partido)

Las relaciones van de esta forma:

class Round < ActiveRecord::Base
   belongs_to :season
   has_many :match_generals
end

class MatchGeneral < ActiveRecord::Base
   belongs_to :round
   has_many :match_reports
end

class MatchReport < ActiveRecord::Base
   belongs_to :match_general
end

Cuando se ejecuta la accion SimulateRound de mi controlador Admin, se
crean los MatchReports para los partidos pertenecientes a la jornada
actual de mi Season y se pone a true el flag_simulated de Round.

Ahora es posible ejecutar la acción ShowMatchs de mi controlador Admin,
se pone el date_start a Time.now.

Aquí es dónde viene mi problema, ya que hasta que los partidos no han
finalizado el admin no podría ejecutar la acción NextRound, el problema
es que no sé como controlar que la jornada ha llegado a su fin.
This topic is locked and can not be replied to.