Этот урок описывает добавление функциональности комментирования к статьям. Комментарии будут отображаться под каждой статьей.
Создание модели комментариев
Создадим модель для хранения комментариев в базе данных и свяжем её со статьями.
- Генерация модели: В терминале, в папке проекта, выполните команду: rails g model Comment username:string body:text post:references. Это создаст:
- username:string: поле для имени пользователя (строка).
- body:text: поле для текста комментария (текст).
- post:references: поле для связи с моделью Post.
- Создание таблицы: Запустите rake db:migrate для создания таблицы в базе данных.
- Установление связи между моделями:
- В 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 упрощает создание подобной функциональности.