Это старый вопрос, но я хочу добавить свое решение, так как README драгоценного камня все еще бесполезен после всех этих лет. Он основан на ответе @ Kunday. Ниже приведено руководство по использованию гем act_as_commentable для ...
- Разрешить пользователям создавать комментарии под каждым сообщением.
- Показать все комментарии, относящиеся к записи.
Это предполагает, что у вас уже есть работающий «блог», будь то картинки или посты. Установите gem, затем запустите rails g comment
, чтобы начать.
Разрешить пользователям создавать комментарии под каждым сообщением.
Во-первых, внутри модели, в которой вы хотите использовать комментируемый камень, добавьте следующую строку, как предложено в README для камня.
class Post < ActiveRecord::Base
acts_as_commentable
end
Затем создайте новый контроллер комментариев с действием create
. Обратите внимание, что :authenticate_user!
является частью устройства, которое является жемчужиной для создания простой аутентификации. current_user
также является частью устройства в качестве помощника. Это необходимо, если вы хотите отобразить имя пользователя / адрес электронной почты под телом комментария.
class CommentsController < ApplicationController
before_action :authenticate_user!
def create
post = Post.find_by(id: params[:id])
comment = post.comments.build(comment_params)
comment.user = current_user
if comment.save
flash[:notice] = "Comment has been created."
redirect_to post
else
flash[:alert] = "Comment has not been created."
end
end
private
def comment_params
params.permit(:comment)
end
end
Далее настройте маршруты. Это просто так. Это означает, что когда кто-то отправляет запрос на публикацию комментариев, мы запускаем действие внутри контроллера комментариев.
post 'comments' => 'comments#create', as: "create_comment"
as: "create_comment"
дает ему псевдоним, так что вы можете сделать create_comment_path
. Теперь, в представлении Post, мы добавим форму. Div поможет вам добавить CSS.
<div class="comment-section">
<%= form_tag create_comment_path, method: "post" do %>
<%= hidden_field_tag "id", @post.id %>
<%= text_area_tag :comment %>
<%= submit_tag "Submit" %>
<% end %>
</div>
Теперь показывать каждый комментарий в представлении Post show.
div поможет вам добавить css, comment.user.name
будет работать, если у вашего класса User есть столбец имени. В противном случае измените его на email
или любой другой идентификатор, который вы выберете для использования.
<div class="comment_list">
<% @comments.each do |comment| %>
<%= comment.comment %> <br>
<%= comment.user.name %> <br>
<br>
<% end %>
</div>
И, наконец, чтобы @comments существовали на странице шоу, перейдите к контроллеру Post и в разделе show добавьте следующее:
def show
@post = Post.find_by(id: params[:id])
@comments = @post.comments.all
end
Это должно быть хорошо для требований. Удачи.