これは古い質問ですが、私の解決策を投入したいと思います。gem の README は何年も経ってもまだ役に立ちません。@ Kundayの回答に基づいています。以下は、act_as_commentable gem を使用して...
- ユーザーが各投稿の下にコメントを作成できるようにします。
- 投稿に属するすべてのコメントを表示します。
これは、写真であろうと投稿であろうと、すでに機能する「ブログ」があることを前提としています。gem をインストールし、実行rails g comment
して開始します。
ユーザーが各投稿の下にコメントを作成できるようにします。
まず、コメント可能な gem を使用するモデル内に、gem の README で提案されているように次の行を追加します。
class Post < ActiveRecord::Base
acts_as_commentable
end
次に、アクションを含む新しいコメント コントローラーを作成しますcreate
。:authenticate_user!
は、簡単な認証を作成するための gem である 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 の show ビューにフォームを追加します。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 を追加するのに役立ちます。Usercomment.user.name
クラスに名前列がある場合に機能します。email
それ以外の場合は、または使用することを選択した任意の識別子に変更します。
<div class="comment_list">
<% @comments.each do |comment| %>
<%= comment.comment %> <br>
<%= comment.user.name %> <br>
<br>
<% end %>
</div>
最後に、@comments が show ページに存在するようにするには、Post コントローラーに移動し、show の下に次を追加します。
def show
@post = Post.find_by(id: params[:id])
@comments = @post.comments.all
end
これは要件に適しているはずです。幸運を。