5

Tengo una página de detalles en la aplicación Rails 3 que tiene varias variables de instancia. Por ejemplo, mi punto de vista tiene las siguientes instancias:¿Cuáles son las mejores formas de consolidar variables de instancia (para pasar datos del controlador a la vista) en Rails?

@product 
@program 
@action 
...etc... 

Algunos de ellos son cadenas individuales, algunos son matrices (resultado de las peticiones de API externas). En general, los datos provienen de al menos 3 modelos.

Mi pregunta es: ¿Cuál es la mejor manera de consolidar las variables de instancia para que mi vista y mi controlador se vean más limpios (sin sacrificar la legibilidad)? Entiendo que la pregunta es abierta y todos tienen sus propias preferencias, pero ¿cuáles son algunas de las opciones? Me refiero a lo largo de las líneas de la combinación de las variables de instancia en un objeto por lo que el código anterior se convierte en algo parecido a esto:

Details.product 
Details.program 
Details.action 

Muchas gracias!

ACTUALIZACIÓN: Al seguir la ruta del objeto, ¿hay algún buen ejemplo (github, publicaciones en el blog) de implementarlo realmente?

+1

Use un hash o un objeto o no se molestan. Tendrás que tener tantos getters de objetos o búsquedas de claves hash como lo harías con variables de instancia. –

+0

Tienes toda la razón, habrá tantos captadores de objetos como yo lo haga. Lo estoy mirando desde el punto de vista de usabilidad/organización. No soy partidario de ir a la ruta hash, ¿hay algún buen ejemplo de ir a la ruta del objeto, entonces? (Actualizaré las preguntas) – user527662

+0

Patrón de presentador podría ser lo que está buscando: http://blog.jayfields.com/2007/03/rails-presenter-pattern.html –

Respuesta

2

En mi opinión, la mejor manera de limpiar las acciones de su controlador es asignar el menor número posible de variables de instancia. En la práctica, intento asignar solo variables de instancia en la acción/before_filters que se derivan directamente de los parámetros que se le pasan. Además, en general trato de enviar tantas asignaciones de variables de instancia a before_filters como pueda para mantener las acciones escasas.

Pero la mejor manera de reducir la asignación de variable de instancia en las acciones es usar ver ayudantes. Por ejemplo, si actualmente está asignando una variable de instancia en una acción que utiliza para generar algún div, simplemente use un asistente de visualización para hacer la salida directamente sin necesidad de pasar un objeto a la vista.

He aquí un ejemplo de un before_filter en un controlador:

before_filter :assign_variables, :only => :show 

def show; end 

private 
def assign_variables 
    @product = Product.find(params[:product_id]) 
    @program = Program.find(params[:program_id]) 
    @action = Action.find(params[:action_id]) 
end 
+0

No creo que me quede totalmente usted está diciendo: en el nivel de modelo, establece antes del filtro para crear ciertas variables de instancia en función de los parámetros que se pasan (definitivamente no es lo que quería decir, pero esta es mi mejor interpretación). Estoy de acuerdo con ver ayudantes, grandes opciones en algunos casos. ¿Algún ejemplo de cualquiera de los enfoques sobre tu github por casualidad? – user527662

+0

Agregué un ejemplo para el controlador – weexpectedTHIS

+0

Gracias, esto lo deja en claro. Definitivamente funciona si quiero seguir usando las variables de instancia pero hacer que sea más limpia de mirar. – user527662

1

Siempre que se encuentre con varias variables de instancia en una acción de controlador, lo mejor es usar el patrón presentador.

Este video explica todo en detalles "Ruby on Rails - Presenters & Decorators"

Cuestiones relacionadas