Problema raro con find y active record

Hola, puede parecer una tonteria pero llevo tiempo dandole vueltas y no
encuentro donde esta el error, es facil de explicar:

tengo con controller que un metodo tiene las siguientes instrucciones:


persona = Persona.find :first

@expedientes_filtrados = persona.expedientes



Bueno pues este codigo me funciona perfectamente, pero cuando sustituyo
:first por una condicion me aparece el siguiente error en la vista

persona = Persona.find(:all,
:conditions => { :identificador => ‘53263162G’})

@expedientes_filtered = persona.expedientes

NoMethodError in ExpedienteController#list

undefined method `expedientes’ for #Array:0x4c0e3c0

Notas: en la tabla personas existe ese identificador y solamente existe
una vez, y esta comprobado que el campo de la tabla esta bien escrito.

Alguna idea?? Muchas gracias

Me autorespondo por si le sirve a alguien.

Investigando “un poco” más he encontrado el problema. find(:first) o
find(id) devuelve un objeto del tipo Persona (en este caso). Mientras
que find(:all…) devuelve un array de personas aunque solamente tenga
un unico elemento como en este caso.
Solucion:

@expedientes_filtered = persona[0].expedientes

Parece muy facil verdad!!
Saludos

si ya sabes que solo necesitas un solo objecto y no un array,
buscalo directamente con :first

persona = Persona.find(:first,
:conditions => { :identificador => ‘53263162G’})

o si prefieres

persona = Persona.first(:conditions => { :identificador => ‘53263162G’})

Saludos
:f

Si el identificador es único, es más fácil que eso:

persona = Persona.find_by_identificador(‘53263162G’)

y si no es único… bueno, entonces no se debería llamar identificador,
porque da lugar a confusión.

s2

Sinceramente muy agradecido a ambos.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs