這是一個老問題,但我想在我的解決方案拋出,以及寶石的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