Forum: Rails-ES Duda conceptual... modelo o librer ía?

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.
0e6c0ba9935b52866fd5c54dd886cf2e?d=identicon&s=25 Jaime Iniesta (Guest)
on 2007-05-29 18:31
(Received via mailing list)
Holas, tengo una duda filosófica en un proyecto-experimento-juguete,
Boris la araña [1]

Es una aplicación Rails que almacena páginas y sus keywords asociadas.
Periódicamente visita las páginas en busca de enlaces que le descubran
nuevas páginas, y va almacenando su título, descripción y keywords de
las etiquetas meta.

Básicamente, los modelos que manejo son Pagina (una URL) y Keyword
(palabra clave, una página has_many keywords, etc.).

Para actualizar todo esto, tengo una tarea programada en el cron que
cada minuto llama a un controlador/vista desde donde cojo la siguiente
página en cola, le saco sus datos y marco como visitada, y así hasta
el siguiente minuto.

Ahora quiero hacer esto con script/runner y veo que sería más limpio
que la araña no fuera un controlador sino un modelo. Entre otras cosas
porque creo que script/runner espera un modelo, según se explica en
[2]. Así que me crearé mi modelo Spider, con métodos para pedirle que
haga sus cosas de arañas. :)

Mi duda es... ¿dónde creo este modelo Spider? No se si meterlo en
app/models ya que no hay una tabla que almacene Spiders... y según la
definición del libro Agile... "the model is responsible for
maintaining the state of the application". Entiendo que el estado se
mantiene en las tablas asociadas a los modelos...

Como es más bien un modelo auxiliar, ¿sería mejor definirlo en lib?

[1] http://boris.railes.net
[2]
http://wiki.rubyonrails.org/rails/pages/HowToRunBa...
03060587b9dd45470d7b704ba3345241?d=identicon&s=25 Marze (Guest)
on 2007-05-29 18:40
(Received via mailing list)
Que casualidad, estoy haciendo algo parecido
en mi caso he creado un script, que va en la lib y que a su vez tiene

Sync::Models
Sync::Controllers

El view no es necesario, xq no muestra nada solo procesa
Si te fijas en como lo hace Camping parece muy lógico

Definitivamente yo lo metería en lib como un nuevo módulo dividido en
submodelos con sus clases respectivas

Hala,
marze

El 29/05/2007, a las 18:30, Jaime Iniesta
escribió:
> Holas, tengo una duda filosófica en un proyecto-experimento-juguete,
A6344ef7ef1e33e8efb34d99e6124490?d=identicon&s=25 Imobach González Sosa (Guest)
on 2007-05-31 10:15
(Received via mailing list)
On Tuesday 29 May 2007 17:30:10 Jaime Iniesta wrote:

> Mi duda es... ¿dónde creo este modelo Spider? No se si meterlo en
> app/models ya que no hay una tabla que almacene Spiders... y según la
> definición del libro Agile... "the model is responsible for
> maintaining the state of the application". Entiendo que el estado se
> mantiene en las tablas asociadas a los modelos...

No todos los modelos de Rails tienen por qué ser persistentes. Es decir,
no
todos tienen que heredar de ActiveRecord::Base y tener una tabla
asociada.

> Como es más bien un modelo auxiliar, ¿sería mejor definirlo en lib?

No estoy del todo de acuerdo: si tiene que ver con la lógica de negocio
directamente, yo lo pondría en app/models. Otra cosa es que, a lo mejor,
el
código referente a las operaciones de red (por poner un ejemplo), lo pongas
en lib/. No sé si me explico.

Saludos.

--
Imobach González Sosa
correo-e: imobachgs en banot punto net
jabber id: osoh en jabberes punto org
web: http://www.banot.net/~osoh/
blog: http://devnull.blogs.banot.net/
A6344ef7ef1e33e8efb34d99e6124490?d=identicon&s=25 Imobach González Sosa (Guest)
on 2007-05-31 10:24
(Received via mailing list)
On Thursday 31 May 2007 09:13:36 Imobach González Sosa wrote:
> > Como es más bien un modelo auxiliar, ¿sería mejor definirlo en lib?
>
> No estoy del todo de acuerdo: si tiene que ver con la lógica de negocio
> directamente, yo lo pondría en app/models. Otra cosa es que, a lo mejor, el
> código referente a las operaciones de red (por poner un ejemplo), lo pongas
> en lib/. No sé si me explico.
>
> Saludos.

Bueno, pensándolo bien, en tu caso podrías tener a lo mejor un método de clase
Pagina#update_all que se encargase de hacer esas operaciones
(eventualmente
apoyándose en alguna biblioteca, que podrías poner en lib/). En "The Rails
Way"[1] hay un artículo[2] interesante al respecto.

Saludos.

[1] http://www.therailsway.com/
[2] http://www.therailsway.com/2006/12/18/importing-files

--
Imobach González Sosa
correo-e: imobachgs en banot punto net
jabber id: osoh en jabberes punto org
web: http://www.banot.net/~osoh/
blog: http://devnull.blogs.banot.net/
0e6c0ba9935b52866fd5c54dd886cf2e?d=identicon&s=25 Jaime Iniesta (Guest)
on 2007-05-31 15:13
(Received via mailing list)
El día 31/05/07, Imobach González Sosa <imobachgs@banot.net> escribió:
>
> Bueno, pensándolo bien, en tu caso podrías tener a lo mejor un método de
> clase
> Pagina#update_all que se encargase de hacer esas operaciones
> (eventualmente
> apoyándose en alguna biblioteca, que podrías poner en lib/).


Gracias Imobach, me has aclarado las dudas que tenía. Suena bien lo del
método de clase en el propio modelo Pagina, ¿quién mejor que esa clase
para
saber cuál es la siguiente página en cola de actualización? Me estaba
confundiendo al pensar que necesitaba un modelo aparte para la araña,
cuando
en realidad la araña es la aplicación en conjunto...

Aparte, tengo una librería precisamente como dices tú, para las
operaciones
de red, con la que extraigo las keywords de las urls y tal.
This topic is locked and can not be replied to.