質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.98%

  • Ruby

    6395questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    6228questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Railsでのコメント返信機能について

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 189

ruby_egg

score 6

現在、Ruby on Railsでコメントが出来るブログを開発しています。
作成されたコメントに対して返信が出来る機能を実装していますが、なかなか実装方法が思いつきませんので、アドバイスを頂きたいです。

現状のソースコードは以下の通りです。

comment.rb
#  id         :integer          not null, primary key
#  user_id    :integer          not null
#  post_id    :integer          not null
#  content    :text
#  created_at :datetime         not null
#  updated_at :datetime         not null
#  deleted_at :datetime
#  reply      :integer
#
# Indexes
#
#  index_comments_on_deleted_at  (deleted_at)
#

class Comment < ApplicationRecord

  ##
  # リレーション
  ##

  belongs_to :user
  belongs_to :post

  has_many :replies, class_name: 'Comment', foreign_key: :reply, dependent: :destroy
end
comment_controller.rb
# コメントの新規作成
  def create
    @post = Post.find(params[:post_id])
    @comment = @post.comments.new(comment_params)
    @comment.user_id = current_user.id
    if @comment.save
      redirect_to @post, notice: "コメントしました"
    else
      redirect_to @post, notice: "コメント出来ませんでした。"
    end
  end

# コメントに返信
  def reply
    # ここの実装がよく分かりません
  end
# コメントに返信するフォーム(Posts/show)
- if @post.comments.present?
    - @post.comments.each do |comment|
      p.commenter_name = comment.user.try(:name)
      p.comment.content = comment.content
      - comment.replies.each do |reply|
        p.comment.content = reply.content

      = form_for [:reply, @post, comment], method: :post do |form|
        p
          = form.text_area "content", rows: 3, cols: 35
        p
          = form.submit "上記の内容で返信する"

# ここの実装も良く分かりません。。。
routes.rb

resources :posts do
  resources :comments, only: [:create, :edit, :update, :destroy] do
    member do
      post :reply
    end
  end
end

アドバイスなど、よろしくお願いいたします!

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

comment_controller.rb

def reply
    @post = Post.find(params[:post_id])
    @comment = @post.comments
    @reply = @comment.new(comment_params)

    @reply.user_id = current_user.id
    @reply.post = @post
    @reply.reply = params[:id]

    if @reply.save
      redirect_to @post, notice: "コメントしました"
    else
      redirect_to @post, notice: "コメント出来ませんでした。"
    end
  end

上記のように実装すると、返信も作成出来ますが、返信と同じ内容のコメントも同時に作成されてしまいます。。。
後、@reply.reply = params[:id]の部分には親コメントのIDを入れたいです。。。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/01/23 10:31

    Commentのテーブルに返信用のカラム「reply_content(text)」を追加したら解決できましたが、contentとreply_contentで同じカラムがあるのが気持ち悪いです。他に何か良い方法はありますでしょうか?単一テーブル継承などを試した方が良いでしょうか?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.98%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    Rails 関連付けについて

    関連付け(アソシエーション)のところでつまずいてしまったので質問させてもらいます。 今は deviseのUser(name を追加しました。) と 投稿のPost と コメントの

  • 解決済

    railsでのコメント返信機能について

    前提・実現したいこと railsでコメント機能つきブログを作成しています。 コメントには返信機能もつけようと思っているのですが、実装方法で悩んでいます。 コメント1

  • 解決済

    【rails】投稿者のIPアドレスを取得したいです。

    rails初心者です。 現在練習で簡単な掲示板を製作しています。 投稿者のIPアドレスを取得したいのですが、今風のおすすめの方法など教えて頂きたいです。 ======

  • 受付中

    railsの変数について

    はじめまして、railsの開始してまもなく1ヶ月が経とうとしいます! teratailの回答者さまにはいつもお世話になっています。 今回はrailsの変数の扱いについて

  • 受付中

    2つのテーブルに属するテーブルのレコードの作り方

    Userテーブル Productテーブル Commentテーブル  の3つのテーブルが存在し、以下のように構成しています。 models/user.rb has_ma

  • 解決済

    Comments#indexはどこに定義されているのでしょうか?

    この動画をみながらサイトを作っていたのですが、 以下のようなエラーが出てしまいました。 削除ボタンを押したらこれが出て、エラーが出るのですが、Comments#indexはど

  • 解決済

    Ruby on Railsのform_forについて

    コメント付きブログを開発しております。Railsのform_forについて質問があります。 コメントに返信をする機能を実装しておりますが、返信のフォームがなかなか上手く実装できませ

  • 解決済

    [Ruby on Rails]条件を複数設定して、レコードの抽出を行いたい

    Ruby on Railsでのレコード検索について質問をさせていただきます。 条件に沿ったユーザー情報を持ってくる処理を考えております。 現在、自分(ログインユーザー)以外のユ

同じタグがついた質問を見る

  • Ruby

    6395questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    6228questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。