Hola Isaac,
El siguiente es un problema que se me está presentado en el desarrollo
de un app. Quiero comentar mi problema a ver si me podrÃan dar alguna
ayuda o consejo. Intentaré ser lo más claro y conciso posible.
En el app que estoy haciendo los usuarios pueden crear posts como en un
blog. Al mismo tiempo el app acentúa mucho el hecho de pertenecer a un
grupo. Entonces un post pertenece tanto a un grupo como a un usuario (Un
post tiene un campo user_id y group_id al que pertenece). Yo quiero
mostrar un index de los posts pertenecientes a un grupo. Utilizo la
acción index del posts_controller para mostrar todos los posts
pertenecientes a un grupo a través de la ruta groups/1/posts. Además de
eso muestro también otros datos como por ejemplo los posts más
recomendados del grupo y los usuarios que mas postean, todos en la misma
acción y vista index.
Entonces aquà viene el problema. También deseo mostrar el index de los
posts que haya hecho un usuario en particular (la ruta serÃa
users/1/posts) y a su vez mostrar otros datos más en las vistas. Pensé
en utilizar cadenas de ifs y elses en el index controller y en las
vistas como solución “fácil y sin pensarlo mucho” pero simplemente es
algo muy sucio y no mantenible. Ahora bien, también hay más problemas.
Se debe poder filtrar los posts de un grupo por categoria o tags y de la
misma forma se pueden filtrar por categoria y tags los posts de un
determinado usuario. Y he aquà donde el problema ya se empieza a
convertir en una bola de nieve. El hecho de tener que filtrar siempre
para grupos o para usuarios en particular. Eso sin contar las vistas
donde se mostrará la información dependiendo del contexto en que se esté
(y además se agregará información adicional dependiendo de dicho
contexto). Pensé también en tener varios controladores pero no me
parecio lógico pues tendrÃa que tener muchos: un controlador post_users,
post_groups, post_user_categories, post_group_categories,
post_user_tags, post_group_tags…
En fin, estoy un poco consternado por esta situación y no se que camino
se debe tomar para plantearle una solución al problema. Agradezco alguna
ayuda, aporte o guÃa. Muchas gracias por tu atención,
ElÃas Orozco
Elias O. wrote:
Hola Isaac,
Disculpen se me pasó quitar ese nombre. El post va dirigido a todos…
Elias O. wrote:
Pensé
en utilizar cadenas de ifs y elses en el index controller y en las
vistas como solución “fácil y sin pensarlo mucho” pero simplemente es
algo muy sucio y no mantenible.
Con esto me refiero a preguntar en la acción del controlador por el
params[:group_id] o params[:user_id], a ver si existen en la ruta del
url para saber que informacion desplegar.
Alguna idea? Si alguien lo desea puedo profundizar más.
Elias O. wrote:
Hola Isaac,
El siguiente es un problema que se me está presentado en el desarrollo
de un app. Quiero comentar mi problema a ver si me podrÃan dar alguna
ayuda o consejo. Intentaré ser lo más claro y conciso posible.
En el app que estoy haciendo los usuarios pueden crear posts como en un
blog. Al mismo tiempo el app acentúa mucho el hecho de pertenecer a un
grupo. Entonces un post pertenece tanto a un grupo como a un usuario (Un
post tiene un campo user_id y group_id al que pertenece). Yo quiero
mostrar un index de los posts pertenecientes a un grupo. Utilizo la
acción index del posts_controller para mostrar todos los posts
pertenecientes a un grupo a través de la ruta groups/1/posts. Además de
eso muestro también otros datos como por ejemplo los posts más
recomendados del grupo y los usuarios que mas postean, todos en la misma
acción y vista index.
Entonces aquà viene el problema. También deseo mostrar el index de los
posts que haya hecho un usuario en particular (la ruta serÃa
users/1/posts) y a su vez mostrar otros datos más en las vistas. Pensé
en utilizar cadenas de ifs y elses en el index controller y en las
vistas como solución “fácil y sin pensarlo mucho” pero simplemente es
algo muy sucio y no mantenible. Ahora bien, también hay más problemas.
Se debe poder filtrar los posts de un grupo por categoria o tags y de la
misma forma se pueden filtrar por categoria y tags los posts de un
determinado usuario. Y he aquà donde el problema ya se empieza a
convertir en una bola de nieve. El hecho de tener que filtrar siempre
para grupos o para usuarios en particular. Eso sin contar las vistas
donde se mostrará la información dependiendo del contexto en que se esté
(y además se agregará información adicional dependiendo de dicho
contexto). Pensé también en tener varios controladores pero no me
parecio lógico pues tendrÃa que tener muchos: un controlador post_users,
post_groups, post_user_categories, post_group_categories,
post_user_tags, post_group_tags…
En fin, estoy un poco consternado por esta situación y no se que camino
se debe tomar para plantearle una solución al problema. Agradezco alguna
ayuda, aporte o guÃa. Muchas gracias por tu atención,
ElÃas Orozco
Para mostrar los posts de un usuario o de un grupo, con diversos
filtros, lo del controller es muy fácil:
cond = params[:group] ? "group_id = #{params[:group]} : params[:user] ?
"user_id = #{params[:user]} : “”
cond += " AND categoria_id = #{params[:categoria]} if params[:categoria]
@posts = Post.all(:conditions => cond, :order => “created_at desc”)
s2
Fernando C. wrote:
Elias O. wrote:
Hola Isaac,
El siguiente es un problema que se me está presentado en el desarrollo
de un app. Quiero comentar mi problema a ver si me podrÃan dar alguna
ayuda o consejo. Intentaré ser lo más claro y conciso posible.
En el app que estoy haciendo los usuarios pueden crear posts como en un
blog. Al mismo tiempo el app acentúa mucho el hecho de pertenecer a un
grupo. Entonces un post pertenece tanto a un grupo como a un usuario (Un
post tiene un campo user_id y group_id al que pertenece). Yo quiero
mostrar un index de los posts pertenecientes a un grupo. Utilizo la
acción index del posts_controller para mostrar todos los posts
pertenecientes a un grupo a través de la ruta groups/1/posts. Además de
eso muestro también otros datos como por ejemplo los posts más
recomendados del grupo y los usuarios que mas postean, todos en la misma
acción y vista index.
Entonces aquà viene el problema. También deseo mostrar el index de los
posts que haya hecho un usuario en particular (la ruta serÃa
users/1/posts) y a su vez mostrar otros datos más en las vistas. Pensé
en utilizar cadenas de ifs y elses en el index controller y en las
vistas como solución “fácil y sin pensarlo mucho” pero simplemente es
algo muy sucio y no mantenible. Ahora bien, también hay más problemas.
Se debe poder filtrar los posts de un grupo por categoria o tags y de la
misma forma se pueden filtrar por categoria y tags los posts de un
determinado usuario. Y he aquà donde el problema ya se empieza a
convertir en una bola de nieve. El hecho de tener que filtrar siempre
para grupos o para usuarios en particular. Eso sin contar las vistas
donde se mostrará la información dependiendo del contexto en que se esté
(y además se agregará información adicional dependiendo de dicho
contexto). Pensé también en tener varios controladores pero no me
parecio lógico pues tendrÃa que tener muchos: un controlador post_users,
post_groups, post_user_categories, post_group_categories,
post_user_tags, post_group_tags…
En fin, estoy un poco consternado por esta situación y no se que camino
se debe tomar para plantearle una solución al problema. Agradezco alguna
ayuda, aporte o guÃa. Muchas gracias por tu atención,
ElÃas Orozco
Para mostrar los posts de un usuario o de un grupo, con diversos
filtros, lo del controller es muy fácil:
cond = params[:group] ? "group_id = #{params[:group]} : params[:user] ?
"user_id = #{params[:user]} : “”
cond += " AND categoria_id = #{params[:categoria]} if params[:categoria]
@posts = Post.all(:conditions => cond, :order => “created_at desc”)
s2
Gracias Fernando,
Ahora bien que me recomiendas para tener unas vistas DRY, porque cada
vista será muy diferente a la otra. Tendrá información adicional
dependiendo del contexto (usuario o grupo).
Saludos,
ElÃas
Lo que dice Fernando puede valer cuando las dos vistas son más o menos
homogeneas pero a veces el resultado es un código tan feo que prefiero
meterlo en vistas diferentes.
Quizás no sea DRY pero si más sostenible.
Otras veces para vistas “polymorficas” lo arreglo con mi amigo eval()
2008/9/23 Fernando C. [email protected]
Elias O. wrote:
Ahora bien que me recomiendas para tener unas vistas DRY, porque cada
vista será muy diferente a la otra. Tendrá información adicional
dependiendo del contexto (usuario o grupo).
Saludos,
ElÃas
Es más fácil de lo que parece… haz una vista con TODA LA INFORMACIÓN
POSIBLE, y después limÃtate a poner ifs que escondan las cosas en
función de si viene o no el usuario, el grupo, etc…
Posts del <%= "grupo #{@grupo.nombre}" if @grupo %><%= "usuario
#{@usuario.nombre}" if @usuario %>
O mejor:
Posts del <%= @grupo ? "grupo #{@grupo.nombre}" : @usuario ?
"usuario #{@usuario.nombre}" : "" %>
Alternativamente, puedes montar la información en el controlador:
@titulo = "Posts del #{params[:group] ? ('grupo ’ + @grupo.nombre) :
('usuario ’ + @usuario.nombre)}
Y sacarla tal cual en la vista:
@titulo
s2
2008/9/23 Elias O. [email protected]
Ahora bien que me recomiendas para tener unas vistas DRY, porque cada
vista será muy diferente a la otra. Tendrá información adicional
dependiendo del contexto (usuario o grupo).
Tirar siempre de partial, manterner las vistas limpieas, cambiar la
vista en
el controlador si el controlador se recicla para lo mismo, y por el
aspecto
no te preocupes, ya que con css es fácil de arreglar aunque los
elementos
tenga la misma estructura.
Un Saludo
Ceritium wrote:
Lo que dice Fernando puede valer cuando las dos vistas son más o menos
homogeneas pero a veces el resultado es un código tan feo que prefiero
meterlo en vistas diferentes.
Quizás no sea DRY pero si más sostenible.
Otras veces para vistas “polymorficas” lo arreglo con mi amigo eval()
2008/9/23 Fernando C. [email protected]
Hola Ceritium,
Me podrÃas ampliar un poco en eso de meterlo en vistas diferentes? Qué
haces exactamente? Creas acciones diferentes? En vez de index otras dos
acciones diferentes? Y también quisiera saber a qué te refieres con
eval(). Gracias de antemano,
ElÃas
2008/9/23 Elias O. [email protected]
else
render…
end
end
A eso se refieren?
O en la vista
Elias O. wrote:
Ceritium wrote:
Lo que dice Fernando puede valer cuando las dos vistas son más o menos
homogeneas pero a veces el resultado es un código tan feo que prefiero
meterlo en vistas diferentes.
Quizás no sea DRY pero si más sostenible.
Otras veces para vistas “polymorficas” lo arreglo con mi amigo eval()
Guillermo wrote:
Tirar siempre de partial, manterner las vistas limpieas, cambiar la
vista en
el controlador si el controlador se recicla para lo mismo, y por el
aspecto
no te preocupes, ya que con css es fácil de arreglar aunque los
elementos
tenga la misma estructura.
Un Saludo
Creo que ambos me hablan de manejar dos vistas diferentes y llamarlas
desde el controlador. Estoy imaginando que desde el la misma acción
index del controlador puedo enviar a renderizar una vista diferente. Es
decir algo como:
def index
if…
render…
else
render…
end
end
A eso se refieren?
2008/9/23 Guillermo [email protected]
elementos tenga la misma estructura.
Exactamente a eso me referÃa, muy bien explicado.
Respecto a eval a mi me es útil en las vistas para cosas como
eval(“new_#{@klass}_profile_path(@tachin, @tachan)”);
Sirve por ejemplo si para el usuario y el grupo necesitas enlaces
diferentes, vamos no es más que un ejemplo.
2008/9/23 Elias O. [email protected]
render…
end
end
A eso se refieren?
Depende muy concretamente del caso. Estudia tu caso y decide cual te es
más
cómoda, más mantenible, etc…
Gracias. Bueno en cuanto haya solucionado todo expondré lo hecho para la
comunidad.