Borrando comentarios – Ruby on Rails

| 2014-12-5 | 1 Comentario »

Otra de las funcionalidades básicas de cualquier blog es la posibilidad de borrar los comentarios de spam. Para ello, vamos a añadir un enlace en la vista y una acción llamada destroy en el controladorCommentsController.

En primer lugar, añade el enlace para borrar comentarios en la plantilla del parcialapp/views/comments/_comment.html.erb:

<p>
  <strong>Commenter:</strong>
  <%= comment.commenter %>
</p>
 
<p>
  <strong>Comment:</strong>
  <%= comment.body %>
</p>
 
<p>
  <%= link_to 'Destroy Comment', [comment.article, comment],
               method: :delete,
               data: { confirm: 'Are you sure?' } %>
</p>

Al pinchar el enlace «Destroy Comment», se envía una petición HTTP de tipo DELETE a la URL/articles/:article_id/comments/:id que será respondida por CommentsController. Así que vamos a crear la acción destroy en el controlador (archivo app/controllers/comments_controller.rb):

class CommentsController < ApplicationController
  def create
    @article = Article.find(params[:article_id])
    @comment = @article.comments.create(comment_params)
    redirect_to article_path(@article)
  end
 
  def destroy
    @article = Article.find(params[:article_id])
    @comment = @article.comments.find(params[:id])
    @comment.destroy
    redirect_to article_path(@article)
  end
 
  private
    def comment_params
      params.require(:comment).permit(:commenter, :body)
    end
end

La acción destroy busca el artículo que estamos leyendo, localiza el comentario dentro de la colección @article.comments, lo borra de la base de datos y vuelve a mostrar la página con el artículo original.

Borrando los objetos asociados

Si borras un artículo, todos sus comentarios también derían borrarse para que no ocupen un espacio innecesario en la base de datos. Rails permite configurar este comportamiento mediante la opcióndependent de la asociación entre modelos. Para ello, modifica el modelo Article cambiando el contenido del archivo app/models/article.rb por lo siguiente:

class Article < ActiveRecord::Base
  has_many :comments, dependent: :destroy
  validates :title, presence: true,
                    length: { minimum: 5 }
end

Acerca del autor: Rodrigo Paszniuk

Ingeniero Informático, amante de la tecnología, la música, el ciclismo y aprender cosas nuevas.

Posts Relacionados

  • Crear API/WEB/CMS utilizando Ruby on Rails
  • Usar Replicas de Bases de Datos en Ruby on Rails con la gema Octopus
  • Recursos – Ruby on Rails
  • Seguridad – Ruby on Rails



SEGUÍNOS EN FACEBOOK


GITHUB