El problema está en que con el método paginate obtienes un array de
elementos. Es decir, @sub_categorias es un array (un conjunto
ordenado) de elementos. Por lo tanto, @sub_categorias no es un objeto
de la clase SubCategorias. Así, si quieres acceder a categoria_id
debes elegir primero uno de los elementos, ya sea el primero, el
último o el n-ésimo (para n entre uno y el número de elementos de @sub_categorias [1]). Por ejemplo, el siguiente código sí que es
válido:
Lee con calma los mensajes de error, que no solo tiene que causar
alarma sino que suele traer información útil sobre las causas del
errror.
Se trata de exactamente lo que te dice, @sub_categorias es un array
de objetos y por tanto no tiene ese método. Tendrías que extraer
alguno de los elementos (primero, úlitmo …) o bien iterar por el
array para hacer el find por cada elemento, en función de lo que
necesites.
mi idea es que cada registro del list @sub_categorias se relacione con @categorias , por su valor de categoria_id.
al hacer eso me lista solo el valor del primer registro y luego tepite
el
mismo resultado para los otros registros, entonces si el primero llama a
la
categoria , libros_rojos… todo los otros registros aparecen con los
libros
rojos …
supongo que habria que hacer iterar el @sub_categorias[n]
pero el error es :
undefined method `categoria_id’ for #Array:0x35370d4
pero es raro porque si hago esto @categoria = Categoria.find(:all,
:conditions => { :id => 1})
.por ejemplo puedo acceder al valor de <%= categorias.nombre_cat %>, en
la
vista list
entonces creo que el problema es que no puedo acceder al valor de @sub_categorias.categoria_id
en el controlador, pero categoria_id, existe como nombre de campo de la
tabla sub_categorias.
el codigo no me resulto, pero tu pregunta final me dio una buena
respuesta.
porque tenia la relacion hecha, en los modelos habia declarado que
categorias has_many sub_categorias y sub_categorias belongs_to:
categorias
mi problema es que pensaba que se tenia que recorrer los resultados en
cada
metodo de clase. osea que habia que hacer doble trabajo. establer la
relacion en los modelos y recorrer los resultados con un find en cada
metodo…
y veo que no es asi
de todas formas gracias por mostrarme como se puede acceder a los datos
del
array, voy a estudiarlo tambien.
@categorias = [] @sub_categorias.each do |sc| @categorias << Categoria.find(:all, :conditions => { :id =>
sc.categoria_id })
end
Entonces, en @categorias[n] tienes las categorias de @sub_categorias[n]. Por otra parte, ¿por qué no estableces una
relación entre SubCategoria y Categoria de forma que puedas acceder a
las categorías de una subcategoría en la forma
sub_categoria.categorias?
Un saludo,
Serabe
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.