Área de comentários para a App

Criado por Janika Liiv, @janikaliiv

Vamos aprender como criar uma área de comentários para nossa aplicação railsgirls ideas.

As instruções para criar a aplicação foram descritas no documento Desenvolva sua primeira aplicação.

Passo 1: Adicionando a foreigner gem

Adicionar Gemfile

gem 'foreigner'

No terminal, pare o servidor se ele estiver rodando e, digite:

bundle install

Passo 2: Criando o scaffold para comentários

Crie o scaffold para os comentários fazendo constar o nome de quem comenta, o corpo do comentário (conteúdo do comentário) e uma referência para a tabela ideas (idea_id).

rails g scaffold comment user_name:string body:text idea_id:integer

Passo 3: Adicione a chave estrangeira para a conexão

Adicione a chave na migração. Abra em db/migrate/ o arquivo cujo nome termina com ‘create_comments.rb’. Depois de:

t.timestamps
end

acrescente o seguinte:

add_foreign_key :comments, :ideas

A seguir migre as alterações feitas no banco de dados digitando no terminal o seguinte:

rake db:migrate

Inicie o servidor digitando:

rails s

Passo 4: Adicione relacionamentos aos modelos

Você precisa assegurar que Rails é capaz de identificar a conexão entre objetos (ideas e comentários). De vez que uma idea pode ter vários comentários precisamos assegurar que o modelo ideas sabe disso. Abra app/models/idea.rb e logo após a linha:

class Idea < ActiveRecord::Base

acrescente o seguinte:

has_many :comments

Um comentário precisa saber que ele pertence a uma idea. Assim, abra app/models/comment.rb e logo após a linha:

class Comment < ActiveRecord::Base

acrescente a seguinte linha:

belongs_to :idea

Step 5: Mostrar o formulário e os comentários existentes

Abra app/views/ideas/show.html é depois da tag de imagem (image_tag):

<%= image_tag(@idea.picture_url, :width => 600) if @idea.picture.present? %>

acrescente o seguinte:

<h3>Comments</h3>
<% @idea.comments.each do |comment| %>
  <div>
    <strong><%= comment.user_name %></strong>
    <br />
    <p><%= comment.body %><p>
  </div>
<% end %>
<%= render 'comments/form' %>

Em app/controllers/ideas_controller.rb acrescente a ação mostrar logo após a linha:

@idea = Idea.find(params[:id])

digitando o seguinte:

@comment = @idea.comments.build

Abra comments/_form.html e logo após:

  <div class="field">
    <%= f.label :body %><br />
    <%= f.text_area :body %>
  </div>

acrescente a seguinte linha:

<%= f.hidden_field :idea_id %>

Pronto! Visualize uma idea que você tenha acrescentado à sua aplicação e você verá ali o formulário para inserir um comentário.