Reusando partials (metaprogramación d e pueblo)

Hola, niños.

estoy reusando partials para objetos de distintas clases, creando
constructos como este:

<%- form_for eval(“#{container.class.to_s.downcase}.to_sym”), :url =>
eval(“translate_#{container.class.to_s.downcase}_path”), :method =>
‘post’ do -%>

Y quisiera opiniones sobre si es muy sucio o poco eficiente,
alternativas mejores, etc.

Muchas gracias.


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

No entiendo muy bien tu problema, pero si es lo que pienso, yo ¿podrías
usar
esto?

render :partial=>‘controlador/form’

Esto usaría el _form.rhtml del controlador que tu le digas

On 10/18/07, Manuel González Noriega [email protected]

On 18/10/2007, Rafa C. [email protected] wrote:

No entiendo muy bien tu problema, pero si es lo que pienso, yo ¿podrías usar
esto?

render :partial=>‘controlador/form’

Esto usaría el _form.rhtml del controlador que tu le digas

Sí, el problema que trato de resolver es la mejor forma de tratar con
el objeto dentro del partial :slight_smile:


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

On 10/18/07, Manuel González Noriega [email protected]
wrote:

alternativas mejores, etc.
<%-
class_name = container.class.to_s.underscore.to_sym
form_for(class_name, :url =>
send(“translate_#{class_name}_path”.to_sym), :method =>
:post) do -%>

El #underscore de Inflector hace que FooBar se convierta en foo_bar
(de otra manera te quedaría foobar).

On 10/18/07, Manuel González Noriega [email protected]
wrote:

Yo me limitare a citar a Vlad the deployer:

“Clever is bad. Period.”

On 18/10/2007, Damian J. [email protected] wrote:

On 10/18/07, Manuel González Noriega [email protected] wrote:

<%-
class_name = container.class.to_s.underscore.to_sym
form_for(class_name, :url =>
send(“translate_#{class_name}_path”.to_sym), :method =>
:post) do -%>

El #underscore de Inflector hace que FooBar se convierta en foo_bar
(de otra manera te quedaría foobar).

Anotado Damián, muchas gracias :slight_smile:


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

¿y creando una carpeta shared y haciendo esto?

render :partial => “shared/form”

disculpa si aun no he entendido lo que te pasa

On 10/18/07, Manuel González Noriega [email protected]

On 10/18/07, Aitor Garcia R. [email protected] wrote:

Yo me limitare a citar a Vlad the deployer:

“Clever is bad. Period.”

Yo me cito a mí mismo:

“Mucho código haciendo todo lo mismo es muy malo. Punto.”

On 18/10/2007, Damian J. [email protected] wrote:

On 10/18/07, Aitor Garcia R. [email protected] wrote:

Yo me limitare a citar a Vlad the deployer:

“Clever is bad. Period.”

Yo me cito a mí mismo:

“Mucho código haciendo todo lo mismo es muy malo. Punto.”

Yo también me voy a citar a mi mismo:

“Manuel, a las 10 donde tu casa”.

Dicha esta tontería, prefiero adoptar un virtuoso punto central y
decir que como lo veo es que aunque demasiada cleverness puede ser
contraproducente, demasiado copypaste puede llevarme al tedio y a ser
un programador infeliz. Así que de momento voy a seguir intentando
hacer un poco de magia dentro de mis (limitadísimas) posibilidades.

Pero la discusión es muy interesante :slight_smile:


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

Damian J.
escribió:> On 10/18/07, Aitor Garcia R. [email protected] wrote:

Yo me limitare a citar a Vlad the deployer:

“Clever is bad. Period.”

Yo me cito a mí mismo:

“Mucho código haciendo todo lo mismo es muy malo. Punto.”

En este caso coincido con Damian, +1 al DRY

Manuel González Noriega wrote:

así®ŠPero cuando recibes dentro del partial instancias que pueden ser de
distintas clases, se trata de utilizar una sintḩs lo m᳠abstracta
posible. Es decir, puedo recibir por ejemplo en ‘_form’ un Cat o un
Dog, así ±ue tengo que evitar utilizar cosas como dogs_path porque no
sé ±ué ²ecibiré ¥xactamente.

Hola Manuel,

Con toda seguridad ya lo consideraste :), pero bueno, no has considerado
parametrizar los objetos que llegan a _form.rhtml, (Cat, Dog) y también
la acción y meterlos al hash :locals cuando renderizas el partial ?

Cómo bien dicen, solo para jalar de este hilo.

Saludos

Jaime Mora R.

On 18/10/2007, Rafa C. [email protected] wrote:

¿y creando una carpeta shared y haciendo esto?

render :partial => “shared/form”

disculpa si aun no he entendido lo que te pasa

Sí, sí, desde luego que lo tengo
así.
Pero cuando recibes dentro del partial instancias que pueden ser de
distintas clases, se trata de utilizar una sintáxis lo más abstracta
posible. Es decir, puedo recibir por ejemplo en ‘_form’ un Cat o un
Dog, así que tengo que evitar utilizar cosas como dogs_path porque no
sé qué recibiré exactamente.


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

On 10/19/07, Benjamín Cárdenas Salamandra [email protected] wrote:

el transferir el modelamiento de la BD a producción es increíblemente
rápido). Lo único que le hace falta pero que ya lo están trabajando es los
textfield autocompleter en cascada (o sea, ya tienen el normal).

Solamente no quiero dejar pasar “yo sólo me preocupo por las reglas
del negocio”.

Opino que la UI es tan o más importante que tener un “súper sistema”
funcionando por detrás. Es decir, si tus usuarios no pueden
interactuar bien con tu aplicación, ya sea por errores o por tareas
que podrían simplificarse, etc., entonces probablemente tampoco puedan
hacer un buen uso de la brillante lógica en tus modelos.

Por eso creo que lo mejor es pensar una aplicación desde las
pantallas, los casos de uso; es decir, los usuarios. Siempre me
termino dando cuenta de que es necesario “juntar” dos modelos de datos
para hacer el CRUD desde la misma pantalla (se me viene a la cabeza
Gastus, una aplicación muy buena, pero que me exige administrar los
tipos de gasto y los conceptos de forma separada, cuando hay una
relación tan intrínseca entre los dos).

Bueno, era eso nomás.

(Sí, leo a Jakob Nielsen :-P)

Manuel González Noriega wrote:

Hola, ni񯳮

estoy reusando partials para objetos de distintas clases, creando
constructos como este:

Manuel, y cuál fué la solución ? O en que status está ? Lo que pasa es
que entre las respuestas filosoficas me perdí, disculpa mi ignorancia,
pero es bueno ó es malo lo que posteaste ?

Saludos.

Jaime Mora R.


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es


Ror-es mailing list
[email protected]
http://lists.simplelogica.net/mailman/listinfo/ror-es

El marco general es resolver como usar el mismo partial para que
mostrar objetos distintos. Por ejemplo, reusar una tabla para mostrar
listados de Fotos y Videos y evitar tener un _tabla_fotos.rhtml y un
_tabla_videos.rhtml en el que lo único que varíe sea el nombre de la
variable de instancia; y además teniendo en cuenta que por ejemplo un
enlace tipo “Editar” tendrá que tener en cuenta que los helpers de
rutas variarán en función del objeto que le hayas pasado
(edit_photo_url o edit_video_url)

En las prisas por hacer el chascarrillo se me olvido comentar algo útil
:smiley:
que recuerdo ahora. Aunque el timing puede no ser el adecuado comentarte
que
en Rails 2 podrás utilizar “Partial Layouts”[1] lo
que básicamente permitiria solventar la parte de la estructura comun que
comentas. En palabras de Ryan Daigle:
“I like to think of partial layouts as common view elements wrapped
around
the main partial content –they control the structure.”

Obviamente esto no solventa todo lo que comentabas en el escrito
original
pero es una forma interesante de quitarte de encima un % importante de
los
casos con un solución super simple. YMMV.

[1]
http://ryandaigle.com/articles/2007/8/3/what-s-new-in-edge-rails-partials-get-layouts

On 19/10/2007, Jaime Mora R. [email protected]
wrote:

Manuel González Noriega wrote:
Manuel, y cuál fué la solución ? O en que status está ? Lo que pasa es
que entre las respuestas filosoficas me perdí, disculpa mi ignorancia,
pero es bueno ó es malo lo que posteaste ?

Hola Jaime,

como nadie me ha dado ningún argumento en contra, estoy utilizando mi
solución, parcheada con la sintaxis que me dió Damian en su primera
respuesta.

El marco general es resolver como usar el mismo partial para que
mostrar objetos distintos. Por ejemplo, reusar una tabla para mostrar
listados de Fotos y Videos y evitar tener un _tabla_fotos.rhtml y un
_tabla_videos.rhtml en el que lo único que varíe sea el nombre de la
variable de instancia; y además teniendo en cuenta que por ejemplo un
enlace tipo “Editar” tendrá que tener en cuenta que los helpers de
rutas variarán en función del objeto que le hayas pasado
(edit_photo_url o edit_video_url)

Como digo, con la sintaxis de Damian para crear dinamicamente estos
helpers, todo va sin problemas.


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

Obviamente esto no solventa todo lo que comentabas en el escrito original
pero es una forma interesante de quitarte de encima un % importante de los
casos con un solución super simple. YMMV.

[1]
http://ryandaigle.com/articles/2007/8/3/what-s-new-in-edge-rails-partials-get-layouts

Ahora que estoy traduciendo esta parte, me entran las ganas de saber
si al final utilizaste algo parecido Manuel…


Un saludo,
Aitor Garcia
Cofounder - Linking Paths
http://www.linkingpaths.com

On 15/11/2007, Aitor Garcia R. [email protected] wrote:

[1]
http://ryandaigle.com/articles/2007/8/3/what-s-new-in-edge-rails-partials-get-layouts

Ahora que estoy traduciendo esta parte, me entran las ganas de saber
si al final utilizaste algo parecido Manuel…

La verdad es que no, utilicé más o menos lo que tenía al principio,
con los retoques sugeridos por Damian,


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.