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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

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

Q&A

0回答

519閲覧

Ajaxがうまく動作しない件について

ShinjiAsai

総合スコア51

Ruby on Rails 6

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ajax

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

0グッド

0クリップ

投稿2020/11/16 11:48

編集2020/11/16 12:10

お世話になります。実行後のタスクの文字色をAjaxにて変更する処理を書いたのですが、うまく動作しないことがあり、質問させていただきます。

環境
Ruby 2.6.5
Rails 6.0.2
Docker 19.03.13

#実現したいこと
実行したタスクを右側にある「チェックボタン」(画像中の赤矢印)をクリックすることによって、文字色が変化するようにしたいと思っています。以下の画像のようなイメージですのでご確認ください。
※ちなみに「チェックボタン」の右側にあるのは「実施取り消しボタン」です。

<タスク未実施の状態>
イメージ説明
<タスクを実施した状態>
イメージ説明

#Ajaxが動作しない状況について

Ajaxが動作しない状況について
ページをリロードした直後に、チェックボタンを押しても文字色が変化しません。ちなみにログを見ると以下のようになっています。

web_1 | Started POST "/habits/3/habit_schedules/75/done" for 172.18.0.1 at 2020-11-16 11:19:16 +0000 web_1 | Cannot render console from 172.18.0.1! Allowed networks: 127.0.0.0/127.255.255.255, ::1 web_1 | Processing by HabitSchedulesController#done as JS web_1 | Parameters: {"habit_id"=>"3", "checkbox_id"=>"75"} web_1 | Checkbox Load (1.2ms) SELECT "habit_schedules".* FROM "habit_schedules" WHERE "habit_schedules"."type" = $1 AND "habit_schedules"."id" = $2 LIMIT $3 [["type", "Checkbox"], ["id", 75], ["LIMIT", 1]] web_1 | ↳ app/controllers/habit_schedules_controller.rb:3:in `done' web_1 | (0.5ms) BEGIN web_1 | ↳ app/controllers/habit_schedules_controller.rb:4:in `done' web_1 | User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 3], ["LIMIT", 1]] web_1 | ↳ app/controllers/habit_schedules_controller.rb:4:in `done' web_1 | Habit Load (2.5ms) SELECT "habits".* FROM "habits" WHERE "habits"."id" = $1 LIMIT $2 [["id", 3], ["LIMIT", 1]] web_1 | ↳ app/controllers/habit_schedules_controller.rb:4:in `done' web_1 | Checkbox Update (1.0ms) UPDATE "habit_schedules" SET "checkbox" = $1, "updated_at" = $2 WHERE "habit_schedules"."id" = $3 [["checkbox", true], ["updated_at", "2020-11-16 11:19:16.934342"], ["id", 75]] web_1 | ↳ app/controllers/habit_schedules_controller.rb:4:in `done' web_1 | (1.7ms) COMMIT web_1 | ↳ app/controllers/habit_schedules_controller.rb:4:in `done' web_1 | Rendering habit_schedules/done.js.erb web_1 | Rendered habit_schedules/done.js.erb (Duration: 0.2ms | Allocations: 6) web_1 | Completed 200 OK in 46ms (Views: 3.4ms | ActiveRecord: 7.7ms | Allocations: 5785)

Ajaxが動作する状況
文字色がすでに青色になった状態で、「チェックボタン」「実施取り消しボタン」を押すと、ページの遷移なく文字色が変化し、Ajaxが動作しているように見えます。

##関連するソースコード

routing

1Rails.application.routes.draw do 2 #中略 3 resources :habits do 4 post 'habit_schedules/:checkbox_id/done', to: 'habit_schedules#done', as: :done 5 post 'habit_schedules/:checkbox_id/notdone', to: 'habit_schedules#notdone', as: :notdone 6 end 7end

controller

1class HabitSchedulesController < ApplicationController 2 def done 3 @checkbox = Checkbox.all.find(params[:checkbox_id]) 4 @checkbox.update(checkbox: true) 5 end 6 7 def notdone 8 @checkbox = Checkbox.all.find(params[:checkbox_id]) 9 @checkbox.update(checkbox: false) 10 end 11end

view

1<% @checkboxes.each do |checkbox| %> 2 <% if checkbox.scheduled_date == display_date %> 3 <%= content_tag "tr", class: "item" do %> 4 <% if checkbox.checkbox == true %> 5 <%= content_tag "td", id: "checkbox-#{checkbox.id}", class: "done-css" do %> 6 <i class="<%= checkbox.habit.icon %> fa-lg fa-fw"></i> <%= checkbox.habit.name %> 7 <% end %> 8 <% else %> 9 <td ><i class="<%= checkbox.habit.icon %> fa-lg fa-fw"></i> <%= checkbox.habit.name %></td> 10 <% end %> 11 <td class="text-right"> 12 <%= link_to habit_done_path(habit_id: checkbox.habit.id, checkbox_id: checkbox.id), method: :post, remote: true do %> 13 <i class="fas fa-check fa-lg fa-fw"></i> 14 <% end %> 15 <%= link_to habit_notdone_path(habit_id: checkbox.habit.id, checkbox_id: checkbox.id), method: :post, remote: true do %> 16 <i class="fas fa-times fa-lg fa-fw"></i> 17 <% end %> 18 </td> 19 <% end %> 20 <% end %> 21<% end %>
#done.js.erb document.getElementById("checkbox-<%= @checkbox.id %>").style.color = "blue";
#notdone.js.erb document.getElementById("checkbox-<%= @checkbox.id %>").style.color = "gray";

エラーらしいエラーが出ておらず、どのように解決したら良いか困っています。他に解決のために必要な情報がありましたら、教えてください。
よろしくお願いします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問