Depuracion de codigo

muy buenas tardes.
depurando mi codigo, veo que debo mejorar este llamado a una pagina o
ventana emergente, la cual se invoca desde un evento dentro del
controller, sin haber pulsado un boton previamente, por que se que es
feo lo quiero cambiar, ahora les pregunto como puedo mejorar esto? que
sugerencias me hacen? teneindo en cuenta que manejo muy poco de ajax.

adjunto el codigo actual, el cual envia parametros a la pagina que
invoca.

render :update do |page|
page[‘movimiento_placa’].value = ‘’
page <<
“window.open('tirillaingreso.rhtml?placa=”+plc+"&msj="+ms+"’,’’,
‘toolbar=no, scrollbars=no, resizable=no, menubar=no, status=no,
directories=no, location=no, width=1, height=1’);"
end

mil gracias

2008/8/20 Aprendiz_ror Ruby on rails
[email protected]:

muy buenas tardes.
depurando mi codigo, veo que debo mejorar este llamado a una pagina o
ventana emergente, la cual se invoca desde un evento dentro del
controller, sin haber pulsado un boton previamente, por que se que es
feo lo quiero cambiar, ahora les pregunto como puedo mejorar esto? que
sugerencias me hacen? teneindo en cuenta que manejo muy poco de ajax.

Hola,

como hemos repetido varias veces hoy, vamos a evitar las preguntas de
javascript en la lista a menos que sean especificamente referidas a
los helpers o muy directamente relacionadas con el framework.

Aunque en este caso confieso que no entiendo muy bien la pregunta y
veo que pones código del controlador, te pediría que clarificases qué
estás preguntando, porque no tengo claro si es off-topic o no :slight_smile:


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

si señor.

desde el controlador necesito invocar una vista, diferente a las que
traen consigo las acciones, dependiendo de un evento dentro del
controller se deben disparar estas vistas, actualmente lo hago con
javascript, se que debe haber otra manera mas moderna de hacerlo, esa es
la pregunta.

ya que esa ventano no se dispara o abre con la pulsacion de un boton,
sino, con dar ente en un campo de texto, de acuerdo a la logica del
negocio se debe dispara una venta u otra y la logica y el flujo de la
aplicacion puede cambiar.

espero haberme explicado mejor.

saludos

2008/8/20 Aprendiz_ror Ruby on rails
[email protected]:

negocio se debe dispara una venta u otra y la logica y el flujo de la
aplicacion puede cambiar.

Creo que te he entendido algo mejor.

No me queda claro porque llamas al fichero .rhml en vez de a una ruta
Rails convencional (controlador/acción/parametros).

En todo caso, lo que deberías hacer en vez del window.open con esa
ventana “invisible”, sería invocar una tarea rake (1) o bien realizar
esa petición http con system (2) y curl/wget. Con cualquiera de las
dos opciones, utilizarías un sistema de colas como Bj (3) para que
fuese de forma asíncrona a la petición principal.

(1) http://www.railsenvy.com/2007/6/11/ruby-on-rails-rake-tutorial
(2) Jay Fields' Thoughts: Ruby Kernel system, exec and %x
(3) http://agilewebdevelopment.com/plugins/bj

Investiga un poco esas posibilidades


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

2008/8/20 Aprendiz_ror Ruby on rails
[email protected]:

desde el controlador necesito invocar una vista, diferente a las que
traen consigo las acciones, dependiendo de un evento dentro del
controller se deben disparar estas vistas, actualmente lo hago con
javascript, se que debe haber otra manera mas moderna de hacerlo, esa es
la pregunta.

Tampoco tengo del todo clara la pregunta.

Otra opcion mas: Si te refieres a que desde la accion necesitas segun
la logica en el controlador o bien mostrar “vista1.rhtml” o bien
“vista2.rhtml” entonces la solucion seria

if …
render :action => “vista1”
else
render :action => “vista2”
end

A pesar de que pone :action, asi es como se renderiza una vista.

2008/8/21 Guillermo [email protected]:

end

Con eso ya te funcionarán todas las vistas sin tener que tocar el
controlador. Aunque insisto que no se si es lo que buscas.

No se si lo pillo.

En rutas tradicionales, si pides

/static/foo

no es necesario que StaticController implemente el metodo “foo”, es
suficiente con que exista foo.html.erb.

2008/8/21 Xavier N. [email protected]

A pesar de que pone :action, asi es como se renderiza una vista.

Si solo es código de vista el que quieres mostrar (ya que me cuesta
entender
que es lo que quieres), siempre puedes usar method_missid

class StaticController < ApplicationController
def method_missing(method)
respond_to do |wants|
wants.html
wants.js
end
end
end

Con eso ya te funcionarán todas las vistas sin tener que tocar el
controlador. Aunque insisto que no se si es lo que buscas.

2008/8/21 Aprendiz_ror Ruby on rails
[email protected]:

lo que busco es el manejo interactivo de ventanas emergentes,
dependiendo de una accion aparece una ventana o la otra, e igualmente el
usuario interactua con esa ventana emergente y puede pulsar uno de dos
botones, de acuerdo a esa pulsacion de los botones, ya iria a otra
accion.

La aproximacion que usas no esta mal, salvo que construiria la URL con
url_for en lugar de a mano concatenando cosas:

url = url_for(:action => ‘tirillaingreso’, :placa => plc, …)
page << %(window.open(“#{h(url)}”, …))

El motivo es que url_for te da una interfaz mas clara y escapa valores
si es necesario.

Quiza podria verse si se puede resolver en el cliente, dependeria de
los detalles ver si RJS es la mejor solucion, pero no esta mal y son
dos lineas tan solo. Si cambias a url_for creo que lo puedes dejar
asi.

mil gracias Xavier y todos los demas que me aportaron sus valiosas
ideas.

me prondre en la tarea de incorporar estas mejoras.

saludos.

Gracias a todos por responder.

lo que busco es el manejo interactivo de ventanas emergentes,
dependiendo de una accion aparece una ventana o la otra, e igualmente el
usuario interactua con esa ventana emergente y puede pulsar uno de dos
botones, de acuerdo a esa pulsacion de los botones, ya iria a otra
accion.

mil gracias

2008/8/21 Guillermo [email protected]:

Coño, lo acabo de comprobar y tienes razón. No lo sabía. Aunque lo he
probado en rails 2 y suelo usar 1.2.6

Yep ha funcionado siempre.

Yo no suelo depender de ello, en el sentido que si la accion “foo” no
hace nada mas que mostrar la vista tengo la costumbre de todos modos
de dejar

def foo
end

en el controlador para que este claro si lo abres que esa accion
existe (ademas de que sirve de placeholder para documentar).

2008/8/21 Xavier N. [email protected]

No se si lo pillo.

En rutas tradicionales, si pides

/static/foo

no es necesario que StaticController implemente el metodo “foo”, es
suficiente con que exista foo.html.erb.

Coño, lo acabo de comprobar y tienes razón. No lo sabía. Aunque lo he
probado en rails 2 y suelo usar 1.2.6
No se si lo usaría por eso.

2008/8/21 Xavier N. [email protected]

def foo
end

en el controlador para que este claro si lo abres que esa accion
existe (ademas de que sirve de placeholder para documentar).

La primera duda es si se ejecutaban los before filters, y sí, se
ejecutan.
Por lo cual ahora la única razón por la cual querer tener un
method_missing
en el controlador es tener código necesario para la vista, o realmente
correspondiente al controlador, y no querer ponerlo en un filter.

Y perdón por el salirme del tema.