En la iteración anterior, Adición de autenticación RESTful, se agregó autenticación a su blog para que solo los usuarios autorizados pudieran crear publicaciones en el blog. Esta iteración agregará la característica final (y principal) del tutorial del blog: comentarios. Una vez que haya terminado con este tutorial, los usuarios podrán publicar comentarios anónimos en publicaciones de blog sin iniciar sesión.
La creación de las tablas y el controlador de la base de datos de comentarios se realiza de la misma manera que se crearon las tablas y el controlador de la base de datos de publicaciones, utilizando el generador de andamios. El generador de andamios creará controladores RESTful, correlacionará rutas y creará migraciones de bases de datos. Pero antes de asumir esto, debe pensar qué es un comentario y cuáles serán sus miembros de datos. Un comentario tiene:
Una vez que haya decidido cuáles son los miembros de datos de un comentario, puede ejecutar el generador de andamios. Tenga en cuenta que el campo de publicación es del tipo "referencias". Este es un tipo especial que generará un campo de ID para vincular la tabla de comentarios con la tabla de publicaciones a través de una clave externa.
Una vez que se generan los controladores y las migraciones, puede continuar y ejecutar la migración ejecutando la tarea db: migrate rake.
Una vez que las tablas de la base de datos estén en su lugar, puede comenzar a configurar el modelo. En el modelo, cosas como validaciones de datos, para garantizar que los campos requeridos estén presentes, y las relaciones se pueden definir. Se usarán dos relaciones.
Una publicación de blog tiene muchos comentarios. La relación has_many no requiere ningún campo especial en la tabla de publicaciones, pero la tabla de comentarios tiene un post_id para vincularla a la tabla de publicaciones. Desde Rieles, puedes decir cosas como @ post.comments para obtener una lista de objetos Comentario que pertenecen al objeto @post. Los comentarios también son dependiente en su objeto Post principal. Si se destruye el objeto Publicar, también se deben destruir todos los objetos de comentarios secundarios.
Un comentario pertenece a un objeto de publicación. Un comentario solo puede asociarse con una sola publicación de blog. La relación belong_to solo requiere un único campo post_id para estar en la tabla de comentarios. Para acceder al objeto de publicación principal de un comentario, puede decir algo como @ comment.post en rieles.
Los siguientes son los modelos Publicar y Comentar. Se han agregado varias validaciones al modelo de comentarios para garantizar que los usuarios llenen los campos requeridos. Observe también las relaciones has_many y belong_to.
El controlador de comentarios no se usará de la manera tradicional en que se usa un controlador RESTful. En primer lugar, se accederá únicamente desde las vistas de la publicación. Los formularios de comentarios y la visualización están completamente en la acción de mostrar del controlador de publicación. Entonces, para empezar, elimine todo aplicación / vistas / comentarios directorio para eliminar todas las vistas de comentarios. No serán necesarios.
A continuación, debe eliminar algunas de las acciones del controlador de Comentarios. Todo lo que se necesita es el crear y destruir comportamiento. Todas las demás acciones se pueden eliminar. Dado que el controlador de comentarios ahora es solo un trozo sin vistas, debe cambiar algunos lugares en el controlador donde intenta redirigirse al controlador de comentarios. Siempre que haya un redirect_to call, cámbielo a redirect_to (@ comment.post). A continuación se muestra el controlador de comentarios completo.
Una de las piezas finales para poner en su lugar es el formulario de comentarios, que en realidad es una tarea bastante simple. Básicamente, hay dos cosas que hacer: crear un nuevo objeto Comentario en la acción de mostrar del controlador de publicaciones y mostrar un formulario que se envíe a la acción de creación del controlador de Comentarios. Para hacerlo, modifique la acción de mostrar en el controlador de publicaciones para que se vea de la siguiente manera. La línea agregada está en negrita.
El último paso es mostrar realmente el comentarios. Se debe tener cuidado al mostrar los datos de entrada del usuario, ya que un usuario podría intentar insertar etiquetas HTML que podrían interrumpir la página. Para evitar esto, el h Se utiliza el método Este método escapará a cualquier etiqueta HTML que el usuario intente ingresar. En otra iteración, se podría aplicar un lenguaje de marcado como RedCloth o un método de filtrado para permitir a los usuarios publicar ciertas etiquetas HTML.
Los comentarios se mostrarán de forma parcial, tal como lo fueron las publicaciones. Crea un archivo llamado app / views / posts / _comment.html.erb y coloque el siguiente texto en él. Mostrará el comentario y, si el usuario ha iniciado sesión y puede eliminar el comentario, también mostrará el enlace Destruir para destruir el comentario.
Finalmente, para mostrar todos los comentarios de una publicación a la vez, llame a los comentarios parciales con : colección => @ post.comments. Esto hará que los comentarios sean parciales para cada comentario que pertenezca a la publicación. Agregue la siguiente línea a la vista show en el controlador de publicaciones.
En la siguiente iteración del tutorial, simple_format será reemplazado por un motor de formato más complejo llamado RedCloth. RedCloth permite a los usuarios crear contenido con marcado fácil como * bold * para bold y _italic_ para italic. Estará disponible para los afiches y comentaristas del blog.