Auto_complete_for y recursos anidados

buenas tardes,

Estoy teniendo dificultades para desplegar este plugin en unos ejemplos
que estoy realizando , son dos modelos anidados, uno el modelo paciente
y el otro el modelo tarea , este último anidado a paciente.

Es decir, urls → http://0.0.0.0:3000/pacientes/1/tareas

Para esto, en el controlador de tareas, obtengo el paciente de la
siguiente forma :


class TareasController < ApplicationController

GET /tareas

GET /tareas.xml

auto_complete_for :prueba, :nombre

before_filter :get_user

layout ‘menu_pacientes’

private

def get_user
@paciente = Paciente.find(params[:paciente_id])
end


El problema viene cuando intento desplegar el plugin auto_complete en
alguna de las vistas de Tarea, de la siguiente forma :


<%= text_field_with_auto_complete :prueba, :nombre , :size => 20 %>


Firebug me devuelve error , entre todas las lineas, destaco estas :


ActiveRecord::RecordNotFound

in TareasController#auto_complete_for_prueba_nombre
Couldn't find Paciente without an ID

RAILS_ROOT: /Users/villa/ruby/nuevo/ultima

  <div id="Application-Trace" style="display: block;">

  <pre><code>/usr/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:1248

:in `find_from_ids’

/usr/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:504:in
`find’

app/controllers/tareas_controller.rb:111:in `get_user’


Dado mi bajo nivel de rails, no estoy seguro de cual es el error,
entiendo que salta el before_filter :get_user y da fallo porque no
tiene :paciente_id , pero como puedo pasarle este parámetro para que no
falle ??

Saludos

Hola David, no he usado este plugin hasta ahora, solo le he dado una
vista
rapida, pero no deberia ser :paciente en vez de :prueba ?

Saludos.

El 26 de julio de 2008 12:03, David
Villa[email protected]
escribió:

Hola Ruben,

Gracias por el aporte pero no , tengo otro modelo llamado Prueba que
tiene el atributo nombre, donde están los nombres de las distintas
pruebas que se pueden realizar en ese centro , es decir :

  • radiografia, analitica, etc.

Lo que quiero es desplegar todas esas opciones con el auto_complete,
cosa que realizo perfectamente en otros controladores donde no ejecuto
el before_filter utilizando la misma sintaxis que en este controlador y
en esta vista , por lo que pienso que ahí es donde está el fallo , pero
no tengo ni idea de como solucionarlo.

gracias

Los helpers Ajax suelen ofrecer un argumento opcional :with para
especificar que se envia exactamente. Ahi puede ir una expresion
JavaScript arbitraria cuyo resultado sea el query string con los
campo=valor que quieras. Si lo usas has de incluir el propio campo de
texto puesto que en tal caso solo se envia lo que dice :with.

Como necesitas el campo de texto y paciente_id, salvo que el form sea
muy pesado queda sencillo usar un campo oculto y enviar simplemente el
form entero:

<%# untested %>
<%= hidden_field_tag :paciente_id, … %>
<%= text_field_with_auto_complete :prueba, :nombre , :with =>
‘$(this.form).serialize()’, :size => 20 %>

No recuerdo de memoria si $(this.form) tiene sentido ahi, pero ves la
idea en cualquier caso.

Xavier N. wrote:

Los helpers Ajax suelen ofrecer un argumento opcional :with para
especificar que se envia exactamente. Ahi puede ir una expresion
JavaScript arbitraria cuyo resultado sea el query string con los
campo=valor que quieras. Si lo usas has de incluir el propio campo de
texto puesto que en tal caso solo se envia lo que dice :with.

Como necesitas el campo de texto y paciente_id, salvo que el form sea
muy pesado queda sencillo usar un campo oculto y enviar simplemente el
form entero:

<%# untested %>
<%= hidden_field_tag :paciente_id, … %>
<%= text_field_with_auto_complete :prueba, :nombre , :with =>
‘$(this.form).serialize()’, :size => 20 %>

No recuerdo de memoria si $(this.form) tiene sentido ahi, pero ves la
idea en cualquier caso.

Muchas gracias Xabier, me ha costado casi 1 hora conseguirlo pero me ha
servido de mucha ayuda, puesto que una vez entendido el concepto , era
cuestión de encontrar la forma de pasarle eso a rails xD.

Lo he resuelto de la siguiente forma, por si alguién mas tiene este
problema :


<% form_for(:tarea, @tarea , :url => paciente_tareas_path(@paciente) ,
:html => { :id => :form1}) do |f| %>

<%= hidden_field_tag :paciente_id , @paciente.id %>

<%= f.label :prueba_id %>
<%= text_field_with_auto_complete :prueba, :nombre , {:size => 20 } , { :with => "$('form1').serialize()"} %>

Observaciones
<%= f.text_area :observaciones , :cols => 26 , :rows => 3 %>


<%= f.submit "Programar" %>

<% end %> -----------

No se si realmente era exactamente a esto a lo que te referías, lo que
he hecho es ponerle un id al formulario y luego ya , he cambiado el
this.form que me has dicho que no conseguía hacerlo funcionar por el
nombre del formulario que quería que prototype serializara.

Funcionar funciona…jeje

2008/7/27 David V. [email protected]:

Xavier N. wrote:
No se si realmente era exactamente a esto a lo que te referías, lo que
he hecho es ponerle un id al formulario y luego ya , he cambiado el
this.form que me has dicho que no conseguía hacerlo funcionar por el
nombre del formulario que quería que prototype serializara.

Exacto, yo lo hago asi mismo de hecho.