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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

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

Ruby on Rails

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

1053閲覧

非同期通信を実装したが、リロードが必要になってしまう

taco

総合スコア4

Ruby

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

Ruby on Rails

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

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2021/07/13 19:17

前提・実現したいこと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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

jQueryのインストールをしたら実装できました!

投稿2021/07/13 20:17

taco

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問