Obtener valor text_field_tag en page.insert_html

Hola,

Necesito obtener el valor del text_field_tag “cant” y pasarlo cómo
parametro en Salina.new(:cant => ???) :

Cantidad:
<%= text_field_tag "cant" %>

<%= link_to_function "Agrega partida" do |page| page.insert_html :bottom, :items, :partial => "item", :object => SalidaItem.new() end %>

Gracias por Adela :slight_smile:

Saludos.

Jaime Mora R.

Me corrijo, quise decir SalidaItem.new(:cant => ???).

Gracias.

Jaime Mora R.

On Oct 18, 2007, at 8:36 PM, Jaime Mora R. wrote:

Me corrijo, quise decir SalidaItem.new(:cant => ???).

Tienes claro que SalidaItem.new(:cant => ???) se calcula en el
servidor, y el valor de un text field solo se conoce en el lado cliente?

– fxn

Xavier N. wrote:

On Oct 18, 2007, at 8:36 PM, Jaime Mora R. wrote:
Tienes claro que SalidaItem.new(:cant => ???) se calcula en el
servidor, y el valor de un text field solo se conoce en el lado cliente?

Si, te cuento, estoy tratando de crear multiples modelos en un mismo
form, manteniendo limpio el controlador, siguiendo el método presentado
por Ryan B. en estos screencasts [parte [1],[2] y [3]. Me vi en la
necesidad de adaptar este método para poder utilizar
model_auto_completer (ya conoces la historia :)). En este método en el
controlador unicamente se observan acciones del modelo padre, en este
caso Salida :

#app/controller/salidas_controller.rb
class SalidasController < ApplicationController

def index
@salidas = Salida.find(:all)
end

def new
@salida = Salida.new
end

def create
@salida = Salida.new(params[:salida])
if @salida.save
flash[:notice] = “El alta de la salida se realizo correctamente.”
redirect_to salidas_path
else
render :action => “new”
end
end

end

#app/models/salida.rb
class Salida < ActiveRecord::Base

has_many :salida_items

def salida_item_attributes=(salida_item_attributes)
salida_item_attributes.each do |attributes|
salida_items.build(attributes)
end
end

end

Como observas el modelo Salida se encarga de gestionar la construcción
de los objetos salida_items. Pretendo dejar el controlador Salida como
está, me gustó el hecho de que no ves acciones del modelo salida_items,
dando claridad al código, pero necesito ajustarlo. Alguna alternativa ?

[1] #73 Complex Forms Part 1 - RailsCasts
[2] #74 Complex Forms Part 2 - RailsCasts
[3] #75 Complex Forms Part 3 - RailsCasts

Gracias … saludos

Jaime Mora R.

On Oct 18, 2007, at 11:21 PM, Jaime Mora R. wrote:

Xavier N. wrote:

On Oct 18, 2007, at 8:36 PM, Jaime Mora R. wrote:
Tienes claro que SalidaItem.new(:cant => ???) se calcula en el
servidor, y el valor de un text field solo se conoce en el lado
cliente?

Si, te cuento, estoy tratando de crear multiples modelos en un mismo
form

Creo que lo que quieres hacer sale solo moviendo eso a una RJS. El
enlance a “añadir” seria un enlace Ajax normal que envia el valor del
text field, y la RJS hace la insercion con el mismo codigo que tienes
escrito ahora en el bloque, solo que estas en el servidor y ya puedes
instanciar con un :cant adecuado y ademas generar nuevos widgets de
auto completado.

Eso tiene sentido?

– fxn

Creo que lo que quieres hacer sale solo moviendo eso a una RJS. El
enlance a “añadir” seria un enlace Ajax normal que envia el valor del
text field, y la RJS hace la insercion con el mismo codigo que tienes
escrito ahora en el bloque, solo que estas en el servidor y ya puedes
instanciar con un :cant adecuado y ademas generar nuevos widgets de
auto completado.

Entonces si muevo esto aun RJS es posible agregar model_auto_completer
con id unicos, cómo lo estaba haciendo en la primera aproximación ayer ?
Permiteme un momentito :slight_smile: no te vayas a dormir, estoy moviendo esto a un
RJS y lo posteo, junto con el partial.

Gracias

Jaime Mora R.

Xavier N. wrote:

Creo que lo que quieres hacer sale solo moviendo eso a una RJS. El
enlance a “añ¡¤©r” seria un enlace Ajax normal que envia el valor del
text field, y la RJS hace la insercion con el mismo codigo que tienes
escrito ahora en el bloque, solo que estas en el servidor y ya puedes
instanciar con un :cant adecuado y ademas generar nuevos widgets de
auto completado.

Eso tiene sentido?

Tiene bastante sentido. Primeramente tuve que cambiar a link_to_remote,
para poder gestionar el RJS, bueno según entiendo :

#app/views/_form.rhtml

Cantidad:
<%= text_field_tag "cant" %>

<%= link_to_remote “Agregar partida”, :url => { :action => :add_partida
}, :with => “‘txt_cant=’ + $(‘cant’).value” %>

#El RJS
#app/views/add_partida.rjs
page.insert_html :bottom, :items, :partial => “item”, :object =>
SalidaItem.new(:cant => params[:txt_cant])

#Y el partial
#app/views/_item.rhtml

<% fields_for "salida[salida_item_attributes][]", item do |salida_item_form| %> <%= model_auto_completer "producto[nombre]", item.nombre_producto, "salida[salida_item_attributes][][producto_id]", item.producto_id %> <%= salida_item_form.text_field :cant, :style => "text-align: right;" %> <%= link_to_function "Eliminar", "$(this.parentNode.parentNode).remove()" %> <% end %>

Xavier, loteria !!!, sabes al cambiar a link_to_remote supongo que ahora
si model_auto_completer trabaja en el entorno apropiado, a reserva lo
que comentes, en la ida y vuelta de ajax, cosa distinta sucedía con
link_to_function, permitiendolo tener id unicos. Por lo tanto el
text_field_tag del _form.rhtml desaparecerá, ya no lo necesito, porque
ahora si se podrá trabajar al puro estilo spreadsheet dónde una
columna será model_auto_completer y otra la cantidad (cant).

Excelente Xavier ! Que pasés buenas noches. :slight_smile:

Saludos.

Jaime Mora R.

Jaime Mora R. wrote:

Xavier N. wrote:

Creo que lo que quieres hacer sale solo moviendo eso a una RJS. El
enlance a “añ¡¤©r” seria un enlace Ajax normal que envia el valor del
text field, y la RJS hace la insercion con el mismo codigo que tienes
escrito ahora en el bloque, solo que estas en el servidor y ya puedes
instanciar con un :cant adecuado y ademas generar nuevos widgets de
auto completado.

Eso tiene sentido?

Tiene bastante sentido. Primeramente tuve que cambiar a link_to_remote,
para poder gestionar el RJS, bueno según entiendo :

#app/views/_form.rhtml

Cantidad:
<%= text_field_tag "cant" %>

<%= link_to_remote “Agregar partida”, :url => { :action => :add_partida
}, :with => “‘txt_cant=’ + $(‘cant’).value” %>

#El RJS
#app/views/add_partida.rjs
page.insert_html :bottom, :items, :partial => “item”, :object =>
SalidaItem.new(:cant => params[:txt_cant])

#Y el partial
#app/views/_item.rhtml

<% fields_for "salida[salida_item_attributes][]", item do |salida_item_form| %> <%= model_auto_completer "producto[nombre]", item.nombre_producto, "salida[salida_item_attributes][][producto_id]", item.producto_id %> <%= salida_item_form.text_field :cant, :style => "text-align: right;" %> <%= link_to_function "Eliminar", "$(this.parentNode.parentNode).remove()" %> <% end %>

Xavier, loteria !!!, sabes al cambiar a link_to_remote supongo que ahora
si model_auto_completer trabaja en el entorno apropiado, a reserva lo
que comentes, en la ida y vuelta de ajax, cosa distinta sucedía con
link_to_function, permitiendolo tener id unicos. Por lo tanto el
text_field_tag del _form.rhtml desaparecerá, ya no lo necesito, porque
ahora si se podrá trabajar al puro estilo spreadsheet dónde una
columna será model_auto_completer y otra la cantidad (cant).

Excelente Xavier ! Que pasés buenas noches. :slight_smile:

Saludos.

Jaime Mora R.

Ya se que es un post viejo, pero estoy realizando algo muy similar
siguiendo lo de RailsCasts y no me funciona, me da un error de
Javascript (si tengo los :defaults bien puestos).

RSJ Error
[Object Error]

Element.insert(“activitats”, {bottom: “\n …etc codigo html del
partial…”});

Uso Rails 2.1.

Una Manita!

Yo intento hacer algo similar quiero realizar autocompletes que estan en
que se llaman igual y se envia en forma alergias={1,2,3]} siendo 3
casillas de texto quiero poder realizar una busqueda i me autocomplete .
con el text_ield_with_autocomplete solo me lo realiza en la primera i en
las demás no y he probado el model_autocompleter i no he conseguido
hacerlo.