Ruby on Rails: Добавление комментариев к статьям

Этот урок описывает добавление функциональности комментирования к статьям. Комментарии будут отображаться под каждой статьей.

Создание модели комментариев

Создадим модель для хранения комментариев в базе данных и свяжем её со статьями.

  1. Генерация модели: В терминале, в папке проекта, выполните команду: rails g model Comment username:string body:text post:references. Это создаст:

    • username:string: поле для имени пользователя (строка).
    • body:text: поле для текста комментария (текст).
    • post:references: поле для связи с моделью Post.
  2. Создание таблицы: Запустите rake db:migrate для создания таблицы в базе данных.
  3. Установление связи между моделями:

    • В app/models/comment.rb: belongs_to :post (комментарий принадлежит посту).
    • В app/models/post.rb: has_many :comments (пост имеет много комментариев).

Настройка маршрутов

Добавьте в config/routes.rb следующую строку:

resources :posts do
  resources :comments
end

Это создаст маршруты типа /posts/:post_id/comments. Выполните rake routes для обновления маршрутов.

Создание контроллера и представлений

Сгенерируйте контроллер командой rails g controller Comments. В app/views/posts/show.html.erb добавьте форму и код для отображения комментариев:

<%= form_with(model: [@post, @post.comments.build]) do |form| %>
  <div class="form-group">
    <%= form.label :username %>
    <%= form.text_field :username, class: "form-control" %>
  </div>
  <div class="form-group">
    <%= form.label :body %>
    <%= form.text_area :body, class: "form-control", rows: 5 %>
  </div>
  <div class="form-group">
    <%= form.submit "Добавить комментарий", class: "btn btn-primary" %>
  </div>
<% end %>

<h2>Комментарии</h2>
<% @post.comments.each do |comment| %>
  <div class="comment">
    <strong><%= comment.username %></strong>: <%= comment.body %>
  </div>
<% end %>

Реализация функционала добавления комментария

В app/controllers/comments_controller.rb создайте метод create:

def create
  @post = Post.find(params[:post_id])
  @comment = @post.comments.create(comment_params)
  redirect_to post_path(@post)
end

private

def comment_params
  params.require(:comment).permit(:username, :body)
end

Этот метод создаёт комментарий, связанный с постом, и перенаправляет на страницу поста.

Теперь функционал добавления и отображения комментариев реализован. Ruby on Rails упрощает создание подобной функциональности.

Что будем искать? Например,программа