Forum: Rails-ES Donde pongo el metodo del controlador, para un partial compartido entre dos controladores?

Posted by Albert Català (albert_c)
on 2011-03-30 23:52
Bueno, el titulo quizás no es muy claro: El caso es que ya lo tengo
funcionando pero creo que es una chapuza. Soy nuevo en Ruby y mas en
MVC.

---->
Antes de exponer mi caso haré la pregunta, y después, por si tenéis mas
paciencia, entro en mi caso:
Si tenéis un partial que usa un controlador/metodo (para recargarse
mediante JS, p.ej) y es compartido entre dos controladores, donde ponéis
dicho codigo? me refiero a este metodo/controlador que recarga el
partial. En que carpetas? partial y controlador
<----

Mi caso:
Tengo un partial con tres selects relacionados, que hacen una llamada JS
a un metodo/controlador para recargarse: metodo=initialize_region y
controlador=ApplicationController

Y este div (los tres selects) los uso en dos pantallas: un controlador
"menu" para buscar, y un controlador "mantenimiento" para grabar datos
nuevos. Y mediante render :partial. este partial esta en views/shared/.

El partial esta en una carpeat comun (shared) y el metodo
(initialize_region) en  ApplicationController.

Lo raro:
Estos dos controladores (menu y mantenimiento) llaman a este metodo
(initilize_region que lo ven porque esta en ApplicationController), pero
para inicializar variales, NO como redirect_to. Y al mismo tiempo
mediante JS estos selects ,desde el partial, llaman a este mismo metodo
para recargarse.

Para hacer esto en initialize_region he puesto:

    # recargo variables de los combos...

    if request.xhr?
      respond_to do |format|
          format.js
      end

para que responda a las llamadas JS solo cuando se llama desde el
navegador (JS), y no cuando se llama desde el metodo index del
controlador menu, o desde el mantenimiento, donde solo tengo:

# en el caso del index (controlador menu)
def index
    #@variables que no vienen al caso

    initialize_region

    respond_to do |format|
      format.html
    end
end

Y para que me responda bien con JS, la llamda del partial, he tenido que
poner el initialize_region.js.rjs en la carpeta views/application.

Esto funciona, pero es normal? esta llamada al initialize_region que es
como "bifuncional", como controlador de una llamda del navegador, y como
una llamada a un metodo comun entre dos controladores, como un modulo.

Bueno muchas gracias. Hay algo hecho en www.aonanem.cat y
www.aonanem.cat/treks/new, donde se ve algo de todo esto

Muchas gracias por todo.
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.