viernes, 23 de septiembre de 2016

Relación 1 a muchos (Categorias/Clasificación de Artículos) (MAPS)

2do MÉTODO. MAPS 

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:

(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