这是一个老问题,但我想提出我的解决方案,而且这些年来 gem 的 README 仍然没有帮助。它建立在@Kunday 的回答之上。以下将是使用 act_as_commentable gem 的教程...
- 允许用户在每个帖子下创建 cmets。
- 显示属于某个帖子的所有 cmets。
这假设您已经有一个工作“博客”,无论是图片还是帖子。安装 gem,然后运行 rails g comment 开始。
允许用户在每个帖子下创建 cmets。
首先,在您要使用可注释 gem 的模型中,按照 gem 的 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
接下来,设置路线。就是这个。这意味着当有人向 cmets 发送 post 请求时,我们将在 cmets 控制器中运行创建操作。
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>
现在在帖子显示视图下显示每条评论。
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>
最后,为了让 @cmets 存在于显示页面中,请转到您的 Post 控制器,并在显示下添加以下内容:
def show
@post = Post.find_by(id: params[:id])
@comments = @post.comments.all
end
这应该符合要求。祝你好运。