Los primeros 3 pasos del primer ejemplo serán los mismos, así que se seguirá con el punto 4 el cuál cambiará para este método:
4.- Mandando las categorías hacia los formularios. Ahora que se ha generado nuestra relación, será necesario mandar nuestras categorías creadas hacia los formularios de editar y crear un nuevo artículo. Para poder recoger todas las categorías y que estas puedan ser mostradas en un select_tag usaremos el hash .map en nuestro controlador de artículos:
@categories = Category.all.map { |result| [result.name, result.id] }
El método .map itera en función a lo que se indique, y creando un arreglo con todos los resultados obtenidos. En este caso, podemos usarlo para iterar sobre Category.all y capturar todas las categorías para tener un arreglo de todas ellas, pero por cada categoría, se creará una arreglo [result.name, result.id] que contiene su nombre y id poder ser usadas en el form, teniendo como resultado en @categories un vector.
Debido a que esta línea debería encontrarse tanto en edit como en new, se opta por crear un before_action para que funcione en solo en estos dos casos only: [:new, edit] y evitar reescribir el mismo código:
Ya están accesibles nuestras categorías, ahora será necesario en el formulario incluir un select_tag el cual se encargará de mostrar la lista desplegable de categorías disponibles, y es donde interviene options_for_select(@categories) recogiendo los dos valores que se declararon anteriormente con el método .map el primero es el name, que será la etiqueta que se mostrará en la lista, y el segundo será el id, que representa su valor y el cuál será el que sea guardado en la BD en el campo category_id generando la relación.
= select_tag :category_id, options_for_select(@categories), :prompt => "Tipo de artículo"
5.- Ahora, se creará otro before_action para poder guardar los parámetros que se cambien a la hora de editar la categoría de un artículo, por lo cual, este será llamado en edit y en create (debido a que cuando se llame a este método, debe pasar el parámetro ID que se le asigno a la hora de llenar el formulario)
@article.category_id = params[:category_id]
en este caso, se definirá article_update
def article_update
@article.category_id = params[:category_id]
end
Con esto, estará completa nuestra implementación de categorías en los artículos. Ya es posible clasificar nuestro contenido al momento de crearlo o editarlo y guardar dicha relación en la BD.
A partir de aquí de puede ir por diferentes vías dependiendo cómo mostrar el catálogo que se desarrolló. Como ejemplo cualquiera, se implementa aquí un menú superior, que servirá para acceder a los artículos, ordenados según su categoría.
4.- Mandando las categorías hacia los formularios. Ahora que se ha generado nuestra relación, será necesario mandar nuestras categorías creadas hacia los formularios de editar y crear un nuevo artículo. Para poder recoger todas las categorías y que estas puedan ser mostradas en un select_tag usaremos el hash .map en nuestro controlador de artículos:
@categories = Category.all.map { |result| [result.name, result.id] }
El método .map itera en función a lo que se indique, y creando un arreglo con todos los resultados obtenidos. En este caso, podemos usarlo para iterar sobre Category.all y capturar todas las categorías para tener un arreglo de todas ellas, pero por cada categoría, se creará una arreglo [result.name, result.id] que contiene su nombre y id poder ser usadas en el form, teniendo como resultado en @categories un vector.
Debido a que esta línea debería encontrarse tanto en edit como en new, se opta por crear un before_action para que funcione en solo en estos dos casos only: [:new, edit] y evitar reescribir el mismo código:
![]() |
(clic para agrandar) |
![]() |
(clic para agrandar) |
Ya están accesibles nuestras categorías, ahora será necesario en el formulario incluir un select_tag el cual se encargará de mostrar la lista desplegable de categorías disponibles, y es donde interviene options_for_select(@categories) recogiendo los dos valores que se declararon anteriormente con el método .map el primero es el name, que será la etiqueta que se mostrará en la lista, y el segundo será el id, que representa su valor y el cuál será el que sea guardado en la BD en el campo category_id generando la relación.
= select_tag :category_id, options_for_select(@categories), :prompt => "Tipo de artículo"
![]() |
(clic para agrandar) |
5.- Ahora, se creará otro before_action para poder guardar los parámetros que se cambien a la hora de editar la categoría de un artículo, por lo cual, este será llamado en edit y en create (debido a que cuando se llame a este método, debe pasar el parámetro ID que se le asigno a la hora de llenar el formulario)
@article.category_id = params[:category_id]
en este caso, se definirá article_update
def article_update
@article.category_id = params[:category_id]
end
![]() |
(clic para agrandar) |
![]() |
(clic para agrandar) |
Con esto, estará completa nuestra implementación de categorías en los artículos. Ya es posible clasificar nuestro contenido al momento de crearlo o editarlo y guardar dicha relación en la BD.
A partir de aquí de puede ir por diferentes vías dependiendo cómo mostrar el catálogo que se desarrolló. Como ejemplo cualquiera, se implementa aquí un menú superior, que servirá para acceder a los artículos, ordenados según su categoría.
No hay comentarios:
Publicar un comentario