Комментарии для приложения 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 %>Вот и всё. Теперь просмотрите идею, которую вы создали, и вы увидите форму для добавления комментария.