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