Á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.