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

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

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

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

Ruby on Rails

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

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

Q&A

解決済

2回答

638閲覧

いいね機能をajaxで導入するもリロードしないと反映されない

smilax630

総合スコア34

Ruby

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

Ruby on Rails

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

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

0グッド

0クリップ

投稿2020/01/24 10:43

いいね機能を非同期で実装しようとして記事を見ながらやってみたのですが、
リロードをしないと反映されない状態になっています。
song/show

ruby

1<!--投稿された歌 --> 2<%= image_tag @song.thumbnail.to_s, :size =>"500x300"%> 3<%= audio_tag(@song.voice) %> 4<%= @song.title %> 5<%= @song.description %> 6<!--いいね機能 --> 7<div id="like_buttons_<%= @song.id %>"> 8 <%= render 'likes/likes_form', song: @song %> 9</div> 10 11<!--投稿したユーザー--> 12<%= link_to user_path(@user) do %> 13<%= @user.name %> 14<% end %> 15<!--コメント欄--> 16<%= form_for @comment, url: comments_path do |f| %> 17<%= f.hidden_field :song_id, :value => @song.id %> 18<%= f.text_field :content %> 19<%= f.submit "送信" %> 20<% end %> 21<% @comments.each do |comment| %> 22 <%= comment.content %> 23 <% if current_user.my_comment?(comment) %> 24 <%= button_to "削除", comment_path(comment), method: :delete %> 25 <% end %> 26<% end %>

ikes/likes_form.html.erb

ruby

1% if current_user.already_liked?(song) %> 2 <%= link_to song_likes_path(song), method: :delete, style: "border-style: none;", remote: true do %> 3 <%= icon("fas", "heart") %> 4 <% end %> 5<% else %> 6 <%= link_to song_likes_path(song), method: :post, remote: true do %> 7 <%= icon("far", "heart") %> 8 <% end %> 9<% end %> 10<%= song.likes.count %>

likes/create.js.erb

ruby

1$('#likes_buttons_<%= @song.id %>').html("<%= j(render partial: 'likes/likes_form', locals: {song: @song}) %>");

likes/destroy.js.erb

ruby

1$('#likes_buttons_<%= @song.id %>').html("<%= j(render partial: 'likes/likes_form', song: @song)%>"); 2

l

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

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

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

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

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

guest

回答2

0

ベストアンサー

websocketというものを使うといいと思います
Rubyはわかりませんがjavascriptはわかるのでサンプル的な何かを張っときますね
参考になれば幸いです

js

1var sock=new WebSocket(サーバーのip); 2sock.onmessage=(msg)=>{ 3 if(msg=="Added Good"){ 4 //なんか 5 }else if(msg=="Subed Good"){ 6 //なんか 7 } 8} 9sock.send("Clicked Good");

ajaxでしたいのならば、方法は私のしっている範囲では、二つあります
1.サーバー側で応答を返さない
2.サーバー側に、更新されたかを返すやつを作る
1は、一回送って戻ってきたら、それを処理する
2は、定期的にチェックして、更新あったら、処理する
という感じで実装すればいいと思います

2の方法は結構バランスを考える必要があるので大変だと思います
するなら、1秒に一回とかでしょうかね
1の方法ならクライアントは負荷が少ないですが、サーバーは、負荷が結構出ます
なぜなら、言語にもよりますが、応答を返さないということは、その分スレッドが立っているからです

なかなか、リアルタイムって難しいですよね)汗

投稿2020/01/24 12:54

syoch0

総合スコア11

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

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

0

  • いいね押す
  • ajaxでサーバーに登録
  • サーバーからいいね状態であるという情報をもってくる
  • いいね状態に書き換える

投稿2020/01/24 10:47

yambejp

総合スコア114839

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

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

yambejp

2020/01/24 10:48

※外すときも同様 ・いいね状態のいいねを押す ・ajaxでサーバーに登録(自分のいいねを削除) ・サーバーからいいね状態ではないという情報をもってくる ・いいね状態を通常に書き替える
smilax630

2020/01/24 10:52

これだとその流れができてないですか?
yambejp

2020/01/24 11:00

> これだとその流れができてないですか? さあ?できてないから更新が必要なのだとは想像できますが ご自身の中ではどこで「サーバーからいいね状態であるという情報を もってきている」のか、その情報をもとにどこで 「いいね状態に書き換える」のでしょうか?
smilax630

2020/01/24 11:23

already_likedというメソッドでいいね状態を情報を取得して、リンクを押すとlikeコントローラーで処理が流れていいね情報を書き換え、remote: trueしてることで、create.js.erbもしくは、destroy.js.erbが呼び出されて、likes_formがrenderされるという流れだと考えています
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問