Forum: Rails-ES Ayuda para tomar la mejor decision

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.
Elias O. (Guest)
on 2008-11-11 22:07
Hola a todos,

Estoy trabajando en una aplicacion donde la URL necesita empezar con el
group_id porque el usuario siempre tendra que navegar dentro de un
grupo, sus eventos y posts.

http://xxx.com/groups/1...
http://xxx.com/groups/1.../events/...

Mi pregunta es:

Cual es la mejor manera de separar los posts pertenecientes a un grupo
de los posts que un usuario en particular haya creado para ese grupo.

Ahora mismo utilizo el metodo index de posts para mostrar todos los
posts de un grupo pero ahora quiero mostrar todo los posts de un usuario
en ese grupo.

1) Deberia crear un nuevo controlador?
2) Una nueva accion en posts controller?
3) Tal vez enviar un parametro extra a la accion index de posts para
saber si debo filtrar por usuario del grupo o grupo en general.

Esas tres opciones las tengo en mente, cual seria le mejor, o hay alguna
otra mejor opcion?

Gracias,

Elias
Luis felipe H. (Guest)
on 2008-11-12 00:21
(Received via mailing list)
Elias, cuando tengo este tipo de situación siempre opto por crear un
nuevo
controlador. Considero que es lo mas fácil, elegante y RESTful.

Esperemos que dice el resto de la lista.

Saludos desde Colombia,

Luis Hurtado.


El 11 de noviembre de 2008 15:07, Elias O. <
removed_email_address@domain.invalid> escribió:
Fernando C. (Guest)
on 2008-11-12 01:29
Elias O. wrote:
> Hola a todos,
>
> Estoy trabajando en una aplicacion donde la URL necesita empezar con el
> group_id porque el usuario siempre tendra que navegar dentro de un
> grupo, sus eventos y posts.
>
> http://xxx.com/groups/1...
> http://xxx.com/groups/1.../events/...
>
> Mi pregunta es:
>
> Cual es la mejor manera de separar los posts pertenecientes a un grupo
> de los posts que un usuario en particular haya creado para ese grupo.
>
> Ahora mismo utilizo el metodo index de posts para mostrar todos los
> posts de un grupo pero ahora quiero mostrar todo los posts de un usuario
> en ese grupo.
>
> 1) Deberia crear un nuevo controlador?
> 2) Una nueva accion en posts controller?
> 3) Tal vez enviar un parametro extra a la accion index de posts para
> saber si debo filtrar por usuario del grupo o grupo en general.
>
> Esas tres opciones las tengo en mente, cual seria le mejor, o hay alguna
> otra mejor opcion?
>
> Gracias,
>
> Elias

Si lo que vas a hacer es sacar una lista de posts en todo caso, no veo
razón para crear una nueva acción, y mucho menos otro controlador.
Simplemente, limítate a filtrar por usuario si es que recibes un
parámetro de usuario:

filtra_usr = params[:user_id] ? " AND user_id = #{params[:user_id]}" :
""
@posts = Post.all(:conditions => "group_id = #{params[:group_id]}
#{filtra_usr}")

o quizá no sea necesario filtrar por grupo si ya filtras por usuario:

@posts = Post.all(:conditions => params[:user_id] ? "user_id =
#{params[:user_id]}" :  "group_id = #{params[:group_id]}")

Es cuestión de filtrar en base a los parámetros que se reciban... todo
lo demás es igual.

s2
Luis felipe H. (Guest)
on 2008-11-12 05:06
(Received via mailing list)
El 11 de noviembre de 2008 18:29, Fernando C. <
removed_email_address@domain.invalid> escribió:

> > Mi pregunta es:
> > 3) Tal vez enviar un parametro extra a la accion index de posts para
> razón para crear una nueva acción, y mucho menos otro controlador.
> @posts = Post.all(:conditions => params[:user_id] ? "user_id =
> removed_email_address@domain.invalid
> http://lists.simplelogica.net/mailman/listinfo/ror-es
>


Difiero de la solución propuesta por Fernando... desde mi punto de vista
es
mucho mejor crear diferentes controladores, digamos GroupPosts para los
posts en un grupo;  GroupUserPosts para los posts de un usuario en un
grupo
e incluso UserPosts para todos los posts de un usuario en caso que se
necesiten. En este último caso siguiendo la solución de Fernando
tendríamos
que incluir mas código en el controlador para filtrar por parámetros que
poco a poco puede hacer el código mas complejo.

Además aunque considero que Fernando lo escribe por cuestiones de hacer
mas
sencillo el código, ese código SQL en los controladores como que no me
termina de gustar.

Saludos desde Colombia!,

Luis Hurtado.
Ruben D. (Guest)
on 2008-11-12 07:03
(Received via mailing list)
Hola Elias, tal vez algo asi te pueda servir:

http://pastie.org/312825

Saludos.
Fernando C. (Guest)
on 2008-11-12 10:46
Ruben Davila wrote:
> Hola Elias, tal vez algo asi te pueda servir:
>
> http://pastie.org/312825
>
> Saludos.

Eso es casi, casi, lo que yo proponía (y por supuesto me gusta). Pero
ojo, que se te ha colado un fallo... Elias dice que el grupo siempre
viene, y el usuario puede que sí o puede que no, así que si pones
primero el if params[:group_id] siempre te entrará por ahí. Primero hay
que mirar el usuario, que es más restrictivo, y si no viene el usuario
es cuando miramos el grupo:

  if params[:user_id]
    @posts = User.find(params[:user_id]).posts
  elsif params[:group_id]
    @posts = Group.find(params[:group_id]).posts

Respecto a la solución de Luis Felipe, y suponiendo que es todo igual
menos el filtrado de registros, crear diferentes controladores me parece
un atentado al principio DRY y no le veo absolutamente ninguna ventaja a
repetir casi todo dos veces.

s2
Elias O. (Guest)
on 2008-11-12 17:35
Hola,

Muchas gracias a todos por su ayuda. Definitivamente me iré por lo
descrito en:

http://pastie.org/312825

Y si es necesario enviaré mas parámteros para filtrar al final del URL.

Gracias nuevamente,

Elías
This topic is locked and can not be replied to.