Комментарии для приложения Rails Girls

от Janika Liiv, @janikaliiv

Мы начинаем добавление воможности комментривания идей в вашем railsgirls приложении.

Инструкции по установке rails и создании приложения идей могут быть найдеты здесь

Шаг 1: Добавление гема foreigner

Добавьте в Gemfile

gem 'foreigner'

Остановите сервер, если он запущен, и запустите в терминале

bundle install

Шаг 2: Создание скаффолда комментария

Создайте скаффолд комментария с именем комментатора, содержимым комментария и связью на таблицу ideas(idea_id).

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

Шаг 3: Добавление внешнего ключа для связи

Добавьте в миграцию связь через внешний ключ. Откройте db/migrate и найдите файл, оканчивающийся на ‘create_comments.rb’. После строки

t.timestamps
end

добавьте

add_foreign_key :comments, :ideas

Теперь запустите миграции, напечатав в терминале

rake db:migrate

Запустите сервер:

rails s

Шаг 4: Добавление связей в модели

Вы должны убедиться, что Rails знают о связи между объектами(ideas и comments). Одна идея может иметь множествоо комментарией, и мы должны убедиться, что модель Idea знает об этом.

Откройте app/models/idea.rb и после строки

class Idea < ActiveRecord::Base

добавьте

has_many :comments

Модель Comment также должна знать о своей связи с Idea. Так что отройте app/models/comment.rb и после строки

class Comment < ActiveRecord::Base

добавьте

belongs_to :idea

Шаг 5: Отображение формы комментирования и существующих комментариев

Откройте app/views/ideas/show.htmlи после image_tag

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

добавьте

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

В app/controllers/ideas_controller.rb добавьте в show экшен после этой строки In app/controllers/ideas_controller.rb add to show action after the row

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

вот это

@comment = @idea.comments.new

Откройте comments/_form.html и после

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

добавьте строку

<%= f.hidden_field :idea_id %>

Вот и всё. Теперь просмотрите идею, которую вы создали, и вы увидите форму для добавления комментария.