Hola a todos,
Queria haceros una consulta sobre Rails, es la primera vez que lo uso,
aunque de Ruby en si se bastante. El caso es que tengo un formulario
en el que hay representado un encargo para una obra, este encargo
tiene asociado un plano, el plano tiene asociadas piezas y otros
subplanos. Ahora mismo tengo los formularios hechos como muestra este
tutorial
tengo un form_for para el trabajo entero y luego voy recursivamente
usando fields_for.
- Mi primera pregunta es si hay alguna alternative mejor para hacer
los fields_for recursivos que la que uso yo (uso markaby por cierto):
for subplano in plano.children do
fields_for form_plano.object_name.sub(/[]/,“[#{plano.id}]”) +
‘[plano_attrs][]’, subplano do |form_plano|
render :partial => ‘planos/plano’, :locals => { :form_plano =>
form_plano, :plano => subplano}
end
end
Esto es para que se vayan anidando en plan:
trabajo[plano_attrs][5][plano_attrs][7][pieza_attrs][11][descripcion]
-
Mi segunda pregunta es sobre Ajax. Por ahora para añadir nuevas
piezas y planos hago una llamada al servidor para que cree una nueva
pieza, y recargo la pagina entera. Idealmente me gustaria poder
añadirlas con link_to_function, pero no entiendo muy bien como
hacerlo. Lo mas parecido que he conseguido es esto$plano_id = plano.id
$form_name = form_plano.object_name.sub(/[]/,“[#{plano.id}]”)
nueva_pieza = link_to_function “Añadir Pieza” do |page|
pieza = Pieza.new(:plano_id => $plano_id)
pieza.tiempo = Tiempo.new
fields_for $form_name + ‘[nueva_pieza_attr][]’, pieza do |
form_pieza|
page.insert_html :after, “plano_#{$plano_id}”, :partial =>
‘pieza_edit’, :locals => {:pieza => pieza,:form_pieza => form_pieza}
end
end
text nueva_pieza
Utilizo nueva_pieza_attr, pora no mezclar las piezas nuevas con las
antiguas. Esto no acaba de funcionar bien, y aunque lo hiciera no
escalaria bien cuando añada subplanos. Yo creo que lo ideal seria que
la informacion del plano_id y del form_name los sacara directamente el
javascript del contexto del elemento del DOM, como por ejemplo del id
del contenedor del link, pero me parece un poco lio, y me imagino que
igual hay alguna manera mas standard de hacer esto.
Vereis que tengo que definir algunas cosas como globales para poder
usarlas dentro del bloque, plano y form_plano no estan accesibles ahi.
Eso es todo, si me podeis orientar un poco estare muy agradecido
Un saludo
Miguel Vazquez