ayanami
September 15, 2009, 9:08pm
1
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
ayanami
September 16, 2009, 12:45am
2
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
ayanami
September 16, 2009, 11:27am
3
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
ayanami
September 17, 2009, 12:45pm
4
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
ayanami
September 17, 2009, 6:38pm
5
Sinceramente muy agradecido a ambos.