这是一个老问题,但我想在我的解决方案抛出,以及宝石的README仍然毕竟这些年来无益。它建立在Kunday的答案上。以下是使用act_as_commentable gem的教程...
- 允许用户在每个帖子下创建注释。
- 显示属于帖子的所有评论。
这假设你已经有一个工作的“博客”,无论是图片还是帖子。安装宝石,然后运行rails g comment
开始。
允许用户在每个帖子下创建评论。
首先,在要使用commentable gem的模型中,添加以下行,如gem的README中所建议的。
class Post < ActiveRecord::Base
acts_as_commentable
end
然后用create
操作创建一个新的评论控制器。请注意,:authenticate_user!
是devise的一部分,它是创建简单认证的宝石。 current_user
也是devise作为帮手的一部分。如果您想在评论主体下显示用户的名称/电子邮件,则需要此名称。
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
将工作,如果您的用户类具有名称列。否则,将其更改为email
或您选择使用的任何标识符。
<div class="comment_list">
<% @comments.each do |comment| %>
<%= comment.comment %> <br>
<%= comment.user.name %> <br>
<br>
<% end %>
</div>
最后,为了在展会页面存在@comments,去安置自己的控制器,并在展会上,添加以下内容:
def show
@post = Post.find_by(id: params[:id])
@comments = @post.comments.all
end
这应该是良好的需求。祝你好运。
http://www.arailsdemo.com/posts/16可能会有所帮助。 – monocle 2010-11-03 05:02:23