Model_auto_completer en Rails 2

Hola,

model_auto_completer en Rails 2.0.2, me lanza el siguiente error :

ActionView::TemplateError (undefined local variable or method
`auto_complete_stylesheet’ for #ActionView::Base:0x479684c) on line
#40 of movtos/show.rhtml:
37: <%= f.hidden_field :movto_id, :value => @movto.id %>
38:


39: Producto: <br >
40: <%= model_auto_completer “producto[nombre]”, “”,
“movto_item[producto_id]”, “”,
41: @movto.concepto_id == COMPRA ? {
:after_update_element => “auto_complete_on_compras” } : {},
42: { :size => 50 } %>
43:

vendor/plugins/model_auto_completer/lib/model_auto_completer_helper.rb:178:in

`model_auto_completer’

Agradezco la ayuda.
Saludos.

Jaime Mora R.

On Jan 23, 2008, at 7:28 PM, Jaime Mora R. wrote:

model_auto_completer en Rails 2.0.2, me lanza el siguiente error :

ActionView::TemplateError (undefined local variable or method
`auto_complete_stylesheet’ for #ActionView::Base:0x479684c) on line
#40 of movtos/show.rhtml:

Tiene toda la pinta de que has de instalar el plugin de auto
completado basico que en Rails 2 ya no viene incluido en el bundle:

script/plugin install auto_complete

– fxn

On Jan 23, 2008, at 7:59 PM, Jaime Mora R. wrote:

protección forgery. Debo tb aplicar este parche ?
Solo has de vigilar que en application.rb no tengas

 protect_from_forgery

Miralo porque se genera por defecto en Rails 2 y es lo que activa la
proteccion contra CSRF.

– fxn

Xavier N. wrote:

Miralo porque se genera por defecto en Rails 2 y es lo que activa la
proteccion contra CSRF.

Pensandolo bien, me gustaría tener este aspecto más de seguridad. Es la
primera vez que voy a parchar a Rails. Alguna guia ?

Te agradezco.

Saludos.

Jaime Mora R.

Xavier N. wrote:

Tiene toda la pinta de que has de instalar el plugin de auto
completado basico que en Rails 2 ya no viene incluido en el bundle:

script/plugin install auto_complete

Es correcto, seguí tus indicaciones, funcionó, gracias. Aprovechando, el
otro dia comentabas con Jaime I. aqui [1], que era necesario
aplicar un parche. En mi caso no he instalado nada explicitamente para
protección forgery. Debo tb aplicar este parche ?

[1] http://www.ruby-forum.com/topic/139108

Muchas gracias !

Saludos

Jaime Mora R.

Xavier N. wrote:

En este caso es muy poco el codigo, se trata de insertar las 3 o 4
lineas que hay en el segundo bloque del diff asociado al ticket:

 http://dev.rubyonrails.org/ticket/10059

Eso lo puedes hacer a mano con cuidadin :-).

Excelente explicación Xavier ! Una pregunta, estás en el turno de noche
ó tb estás de este lado del Atlantico ? :-).

Si llegase a tener un problema con este parche, les contaré.

Te agradezco bastante.

Saludos.

Jaime Mora R.

On Jan 23, 2008, at 11:47 PM, Jaime Mora R. wrote:

Xavier N. wrote:

Miralo porque se genera por defecto en Rails 2 y es lo que activa la
proteccion contra CSRF.

Pensandolo bien, me gustaría tener este aspecto más de seguridad. Es
la
primera vez que voy a parchar a Rails. Alguna guia ?

En este caso es muy poco el codigo, se trata de insertar las 3 o 4
lineas que hay en el segundo bloque del diff asociado al ticket:

 http://dev.rubyonrails.org/ticket/10059

Eso lo puedes hacer a mano con cuidadin :-).

Por lo general para aplicar un parche del Trac de Rails ejecutas esto
desde el root de Rails (el root de Rails mismo, no de una aplicacion
Rails)

patch -p0 < path/al/parche/foo.diff

Si todo fue bien se aplico limpio. Si esto lo vas a hacer mas de dos
veces (por ejemplo un +1 en el Trac asume que has aplicado y probado
el parche) es muy util una utilidad de Frederick C. que automatiza
la descarga y otros detalles:

https://svn1.hosted-projects.com/fcheung/apply_ticket/ApplyTicket-0.1.0.gem

– fxn

Jaime Mora R. wrote:

Excelente explicación Xavier ! Una pregunta, estás en el turno de noche
ó tb estás de este lado del Atlantico ? :-).

Hola Xavier,

Apliqué el parche manualmente y todo ok. Te comento, en
model_auto_completer funciona todo bien con teclado, pero con el ratón
tengo un pequeño inconveniente, al seleccionar un elemento de la lista
cuya longitud de string es menor que el anterior seleccionado me empalma
los caracteres en el cuadro de texto, cómo si no limpiara primero el
cuadro de texto.

Agradezco la ayuda.

Saludos.

Jaime Mora R.

On Jan 24, 2008, at 1:43 AM, Jaime Mora R. wrote:

Jaime Mora R. wrote:

Excelente explicación Xavier ! Una pregunta, estás en el turno de
noche
ó tb estás de este lado del Atlantico ? :-).

Jaja, nocturnidad, nocturnidad.

Apliqué el parche manualmente y todo ok. Te comento, en
model_auto_completer funciona todo bien con teclado, pero con el ratón
tengo un pequeño inconveniente, al seleccionar un elemento de la lista
cuya longitud de string es menor que el anterior seleccionado me
empalma
los caracteres en el cuadro de texto, cómo si no limpiara primero el
cuadro de texto.

Puedes enviar codigo que lo reproduzca por favor?

– fxn

Xavier N. wrote:

Puedes enviar codigo que lo reproduzca por favor?

Si claro, ahi va:

#app/views/movtos/show.rhtml

<% form_remote_for :movto_item, :url => movto_movto_items_path(@movto),
:html => { :id => “movto_item_form” } do |f| %>
<%= f.hidden_field :movto_id, :value => @movto.id %>

Producto:
<%= model_auto_completer "producto[nombre]", "", "movto_item[producto_id]", "", @movto.concepto_id == COMPRA ? { :after_update_element => "auto_complete_on_compras" } : {}, { :size => 50 } %>

Cantidad:
<%= f.text_field :cant %>

<%= controls_show(f) %>

<%= submit_tag "Agrega fila" %>

<% end %>

#app/controllers/movtos_controller.rb

def auto_complete_model_for_producto_nombre
query = params[:producto][:nombre].downcase
query = “%#{query}%”
@productos = Producto.find(:all, :conditions => [‘LOWER(nombre) LIKE
?’, query], :limit => 10)
render :partial => ‘movto_item_producto_completions’
end

#app/views/movtos/_movto_item_producto_completions.rhtml

    <% for producto in @productos %>
  • <%=h producto.nombre %>
  • <% end %>

#public/javascripts/application.js

function auto_complete_on_compras(element, selected) {
document.getElementById(“movto_item_precio”).value =
selected.getAttribute(“precio_compra”);
}

Agradezco la ayuda.
Saludos

Jaime Mora R.

On Jan 24, 2008, at 5:07 PM, Jaime Mora R. wrote:

function auto_complete_on_compras(element, selected) {
document.getElementById(“movto_item_precio”).value =
selected.getAttribute(“precio_compra”);
}

Sin haberlo probado la unica cosa sospechosa que veo es que esta
funcion deberia tener cuatro parametros en su signatura:

:after_update_element: A JavaScript function that is called
when the user has selected one of the completions. It gets
four arguments, the text field, the selected list item, the
hidden field, and the extracted model id.

Podrias probar a ponerselos?

– fxn

On Jan 25, 2008, at 3:25 AM, Jaime Mora R. wrote:

document.getElementById(“movto_item_precio”).value =
selected.getAttribute(“precio_compra”);
}

Visto, es un bug del plugin.

Por defecto, aunque el usuario edite el campo el plugin le pone la
ultima cadena auto completada para que quede claro que no va a viajar
lo que puso a mano sino lo ultimo que selecciono (que es lo unico de
lo que se sabe un ID).

Para eso hay una cache interna y un checkeo en onblur. Por lo que he
visto sucede que al trabajar con el raton salta onblur y el codigo que
mantiene esa integridad pisa al que pone la nueva seleccion.

Solo te escribo para sepas que sucede y sobre todo que no es cosa de
tu aplicacion. En cuanto tenga un hueco subire un fix y hago un ping.

– fxn

Xavier N. wrote:

Solo te escribo para sepas que sucede y sobre todo que no es cosa de
tu aplicacion. En cuanto tenga un hueco subire un fix y hago un ping.

Te agradezco. Estaré alerta.

Saludos.

Jaime Mora R.

On Jan 26, 2008, at 21:28 , Xavier N. wrote:

unico de lo que se sabe un ID).

Para eso hay una cache interna y un checkeo en onblur. Por lo que he
visto sucede que al trabajar con el raton salta onblur y el codigo
que mantiene esa integridad pisa al que pone la nueva seleccion.

Solo te escribo para sepas que sucede y sobre todo que no es cosa de
tu aplicacion. En cuanto tenga un hueco subire un fix y hago un ping.

Fueron dos huecos :-).

Esta arreglado en la 1.5.2 que acabo de subir. Pense que lo arregle
para la 1.5.0 y asi lo puse en el changelog pero fue a costa de una
regresion.

– fxn

Xavier N. wrote:

Sin haberlo probado la unica cosa sospechosa que veo es que esta
funcion deberia tener cuatro parametros en su signatura:
Podrias probar a ponerselos?

Se los puse y el problema persiste.

#public/javascripts/application.js

function auto_complete_on_compras(element, selected, hf, model_id) {
document.getElementById(“movto_item_precio”).value =
selected.getAttribute(“precio_compra”);
}

Agradezco la ayuda.
Saludos.

Jaime Mora R.

Xavier N. wrote:

Esta arreglado en la 1.5.2 que acabo de subir. Pense que lo arregle
para la 1.5.0 y asi lo puse en el changelog pero fue a costa de una
regresion.

Gracias Xavier.

Un saludo.

Jaime Mora R.