shunta9922
@shunta9922 (shimo shun)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

コメント機能の実装

解決したいこと

Ruby on Railsでtwitterのような映画の感想を投稿するWebアプリをつくっています。
投稿(movie)に対してコメントする機能を実装した際に、dbに保存されません
初学者で解決方法に手を焼いて為、教えていただければ幸いです。

発生している問題・エラー

show.html.erb

<div class="comment-show-item">           
         <% @comments.each do |comment| %> 
           <div class="comment-index-item">           
            <div class="comment-right">
               <%= comment.content %>
             </div> 
           </div>
         <% end %>
      </div>   
      <div class="comment-show-item">    
         <%= form_with model:[@movie,@comment],local:true do |f| %>
            <%= f.text_field :content %> 
            <%= f.submit %>   
         <% end %>
      </div>

movies_controller

 def create
   @movie=Movie.new(
     content: params[:content],
     title: params[:title],
     user_id: @current_user.id
  )
   if @movie.save
     flash[:notice]= "投稿を作成しました"
     redirect_to "/movies"
   else
      render("comments/:id/new")
   end

comments_controller

 def new
   @comment = Comment.new
   @movie =Movie.find(params[:movie_id])
   @user = User.find(@movie.user_id)
  end

 def create
   @movie=Movie.find_by(id: params[:movie_id])  
   @comment = @current_user.comment.new(comment_params)

   if @comment.save
     flash[:notice]= "コメントしました"
     redirect_to movie_path(@movie)
   else
     flash[:notice]="コメントに失敗しました"
     render movie_path(@movie.id)
   end


  end



 def destroy
   @movie=Movie.find_by(id:params[:id])  
   @comment = Comment.find(params[:id]).destroy
   redirect_to movie_path
 end

 private
 def comment_params
   comment_params = params.require(:comment).permit(:content).merge(user_id: :current_user,reply_comment: params[:movie_id])
 end
movie.rb
 has_many :comment,foreign_key: :reply_comment,dependent: :destroy
 belongs_to :user

comment.rb
belongs_to :user
belongs_to :movie

routes

 resources :movies do
   resources :comments 

  collection do
     get 'search'
   end


 end

schema

 create_table "comments", force: :cascade do |t|
    t.text "content"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "user_id"
    t.integer "reply_comment"
  end

  create_table "likes", force: :cascade do |t|
    t.integer "user_id"
    t.integer "movie_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "movies", force: :cascade do |t|
    t.text "content"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.integer "user_id"
    t.string "title"
  end

自分で試したこと

form_withにミスがあるか確認しましたが以前問題は解決しませんでした

0

1Answer

「dbに保存されない」といっても様々な状況が考えられます。

  1. リクエストする
  2. リクエストを処理する
  3. DBに保存する

どの工程でどういった問題が出ているのでしょうか?
ブラウザのコンソールやアプリケーションのログなどにエラーは出ていませんか?

0Like

Comments

  1. @shunta9922

    Questioner

    返信ありがとうございます。おそらく3のdbの保存です。
    コメントを保存するcomment.saveの前にbinding.pryを試して確認したところ1.2は問題なかったです

    9: def create
    10: @movie=Movie.find_by(id: params[:movie_id])
    11: @comment = @current_user.comment.new(comment_params)
    => 12: binding.pry
    13: if @comment.save
    14: flash[:notice]= "コメントしました"
    15: redirect_to movie_path(@movie)
    17: flash[:notice]="コメントに失敗しました"

    <page break> --- Press enter to continue ( q<enter> to break ) --- <page break>
    p
    18: render template:"movies/show"
    19: end
    20:
    22: end
    [1] pry(#<CommentsController>)> params[:movie_id]
    => "28"
    [2] pry(#<CommentsController>)> @movie
    => #<Movie:0x000000000ef53cb0
    id: 28,
    content: "中世期のキリスト教の修道院を舞台にしたミステリー映画",
    created_at: Mon, 14 Jun 2021 03:23:13 UTC +00:00,
    updated_at: Mon, 14 Jun 2021 03:23:13 UTC +00:00,
    user_id: 9,
    title: "薔薇の名前">
    [3] pry(#<CommentsController>)> @comment
    => #<Comment:0x000000000ef30e18 id: nil, content: "あれいいよな", created_at: nil, updated_at: nil, user_id: 9, reply_comment: 28>

Your answer might help someone💌