Permitindo comentários no Ruby on Rails

click fraud protection

Na iteração anterior, Adicionando autenticação RESTful, a autenticação foi adicionada ao seu blog para que apenas usuários autorizados pudessem criar postagens no blog. Essa iteração adicionará o recurso final (e principal) do tutorial do blog: comentários. Depois de concluir este tutorial, os usuários poderão postar comentários anônimos nas postagens do blog sem fazer login.

A criação das tabelas e do controlador do banco de dados de comentários é feita da mesma maneira que as tabelas e o controlador do banco de dados de postagens foram criados - usando o gerador de andaimes. O gerador de andaime criará controladores RESTful, mapeará rotas e criará migrações de banco de dados. Mas antes de aceitar isso, você deve pensar sobre o que é um comentário e quais serão seus membros de dados. Um comentário tem:

Depois de decidir quais são os membros dos dados de um comentário, você pode executar o gerador de andaimes. Observe que o campo de postagem é do tipo "referências". Este é um tipo especial que irá gerar um campo de ID para vincular a tabela de comentários à tabela de postagens por meio de uma chave estrangeira.

instagram viewer

Depois que os controladores e as migrações são gerados, você pode prosseguir e executar a migração executando a tarefa db: migrate rake.

Depois que as tabelas do banco de dados estiverem em vigor, você poderá começar a configurar o modelo. No modelo, coisas como validações de dados - para garantir a presença de campos obrigatórios - e as relações podem ser definidas. Duas relações serão usadas.

Uma postagem no blog tem muitos comentários. O relacionamento has_many não requer campos especiais na tabela de postagens, mas a tabela de comentários possui um post_id para vinculá-lo à tabela de postagens. A partir de Trilhos, você pode dizer coisas como @Postar comentários para obter uma lista dos objetos de comentário que pertencem ao objeto @post. Comentários também são dependente no objeto Post pai deles. Se o objeto Post for destruído, todos os objetos de comentário filho também deverão ser destruídos.

Um comentário pertence a um objeto de postagem. Um comentário pode ser associado apenas a uma única postagem no blog. O relacionamento belongs_to exige apenas que um único campo post_id esteja na tabela de comentários. Para acessar o objeto de postagem pai de um comentário, você pode dizer algo como @ comment.post no Rails.

A seguir estão os modelos de postagem e comentário. Várias validações foram adicionadas ao modelo de comentários para garantir que os usuários preencham os campos obrigatórios. Observe também os relacionamentos has_many e pertence_ a.

O controlador de comentários não será usado da maneira tradicional em que um controlador RESTful é usado. Primeiro, ele será acessado apenas a partir das visualizações de postagem. Os formulários e a exibição do comentário estão inteiramente na ação show do controlador Post. Então, para começar, exclua todo app / visualizações / comentários diretório para excluir todas as visualizações de comentários. Eles não serão necessários.

Em seguida, você precisa excluir algumas das ações do controlador Comentários. Tudo o que é necessário é o crio e destruir ações. Todas as outras ações podem ser excluídas. Como o controlador Comments agora é apenas um esboço sem exibições, é necessário alterar alguns locais no controlador em que ele tenta redirecionar para o controlador Comments. Sempre que houver uma chamada de redirecionamento, altere-a para redirect_to (@ comment.post). Abaixo está o controlador de comentários completo.

Uma das peças finais a serem colocadas em prática é o formulário de comentários, que na verdade é uma tarefa bastante simples. Existem basicamente duas coisas a serem feitas: criar um novo objeto Comment na ação show do controlador de postagens e exibir um formulário que é enviado para a ação create do controlador Comments. Para fazer isso, modifique a ação show no controlador de postagens para se parecer com o seguinte. A linha adicionada está em negrito.

O passo final é realmente exibir o comentários. É necessário ter cuidado ao exibir os dados de entrada do usuário, pois ele pode tentar inserir tags HTML que podem atrapalhar a página. Para evitar isso, o h método é usado. Esse método escapará de quaisquer tags HTML que o usuário tentar inserir. Em uma iteração adicional, uma linguagem de marcação como RedCloth ou um método de filtragem pode ser aplicada para permitir que os usuários publiquem determinadas tags HTML.

Os comentários serão exibidos com uma parcial, assim como as postagens. Crie um arquivo chamado app / views / posts / _comment.html.erb e coloque o seguinte texto nele. Ele exibirá o comentário e, se o usuário estiver conectado e puder excluir o comentário, também exiba o link Destruir para destruir o comentário.

Por fim, para exibir todos os comentários de uma postagem de uma só vez, chame os comentários parciais com : coleção => @ post.comments. Isso chamará os comentários parciais para todos os comentários que pertencem à postagem. Adicione a seguinte linha à exibição de exibição no controlador de postagens.

Na próxima iteração do tutorial, simple_format será substituído por um mecanismo de formatação mais complexo chamado RedCloth. O RedCloth permite que os usuários criem conteúdo com marcação fácil, como * bold * para negrito e _italic_ para itálico. Isso estará disponível para os pôsteres e comentadores do blog.

instagram story viewer