前提・実現したいことs
ここに質問の内容を詳しく書いてください。
Ruby(rails)で電子連絡帳を作っています。
ajaxでの非同期通信機能を実装中ですが、リロードをしないと投稿データが反映されません。
いろいろなサイトで検索しましたが、変化なしです。
非同期通信できるようにしたいです。
該当のソースコード
routes
1Rails.application.routes.draw do 2 devise_for :users 3 root to: "home#top" 4 resources :diaries do 5 resources :comments, only: :create 6 end 7 resources :users, only: [:show, :edit, :update] 8end
Diarycontroller
1class DiariesController < ApplicationController 2 def index 3 @diaries = Diary.all 4 end 5 6 def new 7 @diary = Diary.new 8 end 9 10 def create 11 @diary = Diary.new(diary_params) 12 if @diary.save 13 redirect_to root_path 14 else 15 render :new 16 end 17 end 18 19 def show 20 @diary = Diary.find(params[:id]) 21 @comment = Comment.new #① 22 @comments = @diary.comments #② 23 end 24 25 def edit 26 @diary = Diary.find(params[:id]) 27 end 28 29 def update 30 @diary = Diary.find(params[:id]) 31 if @diary.update(diary_params) 32 redirect_to root_path 33 else 34 render :edit 35 end 36 end 37 38 def destroy 39 @diary = Diary.find(params[:id]) 40 @diary.destroy 41 redirect_to root_path 42 end 43 44 private 45 def diary_params 46 params.require(:diary).permit(:diary_day, :title, :diary, :image).merge(user_id: current_user.id) 47 end 48end 49
showhtmlerb
1<h2 class="page-heading"> 2 <%= @diary.diary_day %> 3</h2> 4 <div> 5 <%= image_tag @diary.image ,class:"item-box-img" %> 6 </div> 7 <table class="table"> 8 <tbody> 9 <tr> 10 <th class="table__col1">日記</th> 11 <td class="table__cal3"><%= @diary.title %></td> 12 <td class="table__col2"><%= @diary.diary %></td> 13 </tr> 14 </tbody> 15 </table> 16 17 <div> 18 <h4>コメント</h4> 19 <div id="comments_area"><!-- #① --> 20 <!-- 投稿されたコメント一覧をブログの詳細ページに表示するためのrender --> 21 <%= render partial: 'comments/index', locals: { comments: @comments } %> 22 </div> 23 <% if user_signed_in? %> 24 <!-- コメント入力欄をブログの詳細ページに表示するためのrender --> 25 <%= render partial: 'comments/form', locals: { comment: @comment, diary: @diary } %> 26 <% end %> 27 </div> 28 29 30 <div> 31 <%= link_to "編集する", edit_diary_path(@diary) %> 32 <%= link_to "削除する", diary_path(@diary), method: :delete %> 33 </div> 34
Commentscontroller
1class CommentsController < ApplicationController 2 3 def create 4 @diary = Diary.find(params[:diary_id]) #① 5 @comment = @siary.comments.build(comment_params) #② 6 @comment.user_id = current_user.id #③ 7 if @comment.save 8 render :index #④ 9 end 10 end 11 12 13 private 14 def comment_params 15 params.require(:comment).permit(:comment, :diary_id, :user_id) 16 end 17end
indexhtmlerb
1<% comments.each do |comment| %> 2 <% unless comment.id.nil? %> 3 <p><%= link_to "#{comment.user.nickname}さん", user_path(comment.user.id) %></p> 4 <p>コメント:<%= comment.comment %></p> 5 <% end %> 6<% end %>
formhtmlerb
1<%= form_with(model: [diary, comment] ) do |form| %> 2 <div> 3 <%= form.text_area :comment %> 4 </div> 5 <div class="actions"> 6 <%= form.submit "コメントをする" %> 7 </div> 8<% end %>
indexjs
1$("#comments_area").html("<%= j(render 'index', { comments: @comment.diary.comments }) %>") 2$("textarea").val('')
初学者で拙いコードではありますが、どなたか教えていただければ幸いです。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。