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

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

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

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby on Rails

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

JavaScript

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

非同期処理

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

Ajax

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

Q&A

0回答

754閲覧

【Rails】いいね機能の非同期通信のcreateでエラーがおきてしまいます。。。

jirou6699

総合スコア4

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby on Rails

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

JavaScript

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

非同期処理

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

Ajax

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

0グッド

0クリップ

投稿2020/09/26 17:49

前提・実現したいこと

いいね機能の非同期通信を「remote:true」を使用して実装しようとしています。
destroyまでは反応するようになったのですが、createがどうしてもわからない状況です。
大変申し訳ないのですが教えていただけませんでしょうか?

発生している問題・エラーメッセージ

ターミナルで非同期createを実行すると下記のようにjob_idgが見つからないとエラー表示されるように思います。
コントローラの18行目あたりのset_tweetを修正するよう指示もあるので見てみました。
ActiveRecord::RecordNotFound (Couldn't find Job with 'id'=21):
app/controllers/favorites_controller.rb:18:in `set_tweet'

Started DELETE "/jobs/8/favorites" for ::1 at 2020-09-27 02:08:40 +0900 Processing by FavoritesController#destroy as JS Parameters: {"job_id"=>"8"} User Load (0.6ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` ASC LIMIT 1 Job Load (0.4ms) SELECT `jobs`.* FROM `jobs` WHERE `jobs`.`id` = 8 LIMIT 1 ↳ app/controllers/favorites_controller.rb:18:in `set_tweet' Favorite Load (0.4ms) SELECT `favorites`.* FROM `favorites` WHERE `favorites`.`user_id` = 2 AND `favorites`.`job_id` = 8 LIMIT 1 ↳ app/controllers/favorites_controller.rb:11:in `destroy' (0.2ms) BEGIN ↳ app/controllers/favorites_controller.rb:12:in `destroy' Favorite Destroy (0.6ms) DELETE FROM `favorites` WHERE `favorites`.`id` = 21 ↳ app/controllers/favorites_controller.rb:12:in `destroy' (1.0ms) COMMIT ↳ app/controllers/favorites_controller.rb:12:in `destroy' Rendering favorites/destroy.js.haml Favorite Exists? (0.6ms) SELECT 1 AS one FROM `favorites` WHERE `favorites`.`user_id` = 2 AND `favorites`.`job_id` = 21 LIMIT 1 ↳ app/models/user.rb:16:in `already_favorited?' Rendered matches/_favorite.html.haml (Duration: 3.2ms | Allocations: 921) Rendered favorites/destroy.js.haml (Duration: 5.6ms | Allocations: 2512) Completed 200 OK in 22ms (Views: 5.9ms | ActiveRecord: 3.8ms | Allocations: 8273) Started POST "/jobs/21/favorites" for ::1 at 2020-09-27 02:08:44 +0900 Processing by FavoritesController#create as JS Parameters: {"job_id"=>"21"} User Load (0.7ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` ASC LIMIT 1 Job Load (0.4ms) SELECT `jobs`.* FROM `jobs` WHERE `jobs`.`id` = 21 LIMIT 1 ↳ app/controllers/favorites_controller.rb:18:in `set_tweet' Completed 404 Not Found in 7ms (ActiveRecord: 1.1ms | Allocations: 2741) ActiveRecord::RecordNotFound (Couldn't find Job with 'id'=21): app/controllers/favorites_controller.rb:18:in `set_tweet'

該当のソースコード

controllers/favorites_controller.

ruby

1class FavoritesController < ApplicationController 2 before_action :authenticate_user! 3 before_action :set_tweet 4 5 def create 6 @favorite = current_user.favorites.create(job_id: @job.id) 7 # redirect_back(fallback_location: root_path) 8 end 9 10 def destroy 11 @favorite = current_user.favorites.find_by(job_id: @job.id) 12 @favorite.destroy 13 # redirect_back(fallback_location: root_path) 14 end 15 16 private 17 def set_tweet 18 @job = Job.find(params[:job_id]) 19 end 20end

部分テンプレートのソースコード

_favorite.html.haml

ruby

1-if user_signed_in? 2 -if current_user.already_favorited?(match) 3 = link_to job_favorites_path(match.id), method: :delete, remote: true do 4 = icon('fas', 'star', class: "Job-catch__box--star--color") 5 - else 6 = link_to job_favorites_path(match.id), method: :post, remote: true do 7 = icon('far', 'star')

jsファイルのソースコード

create.js.haml / destroy.js.haml

js

1('.Job-catch__box--star').html("#{escape_javascript(render partial: "matches/favorite", locals: { match: @favorite })}");

render付近のソースコード

部分テンプレートの状況からさらに、js処理をしたい部分をrenderで部分テンプレートしています。

ruby

1 .Bar-left__middle 2 - matches.each do |match| 3 .Job-box 4 .Upper-job 5 .Upper-job__new 6 NEW 7 .Upper-job__no 8 job.no eeeeeeee 9 .Job-catch 10 .Job-catch__textarea 11 .Job-catch__textarea--text 12 =match.title 13 .Job-catch__box 14 .Job-catch__box--star 15 = render partial: "favorite", locals: { match: match } 16 .Job-catch__box--text

試したこと

色々と記事を読んでいますと部分テンプレートでrenderする時に下記のようにidと該当のjob_idを設定し、jsファイルも同じように設定してみましたがエラーになってしまいます。。。何卒よろしくお願いします。

ruby

1.Job-catch__box--star 2 %div{id: "job_favorite_#{match.id}"} 3 = render partial: "favorite", locals: { match: match }

terminal

1 2ActionView::Template::Error (undefined local variable or method `match' for #<#<Class:0x00007f9f738101e0>:0x00007f9f86e31a70> 3Did you mean? catch): 4 1: $("#job_favorite_#{match.id}").html("#{escape_javascript(render partial: "matches/favorite", locals: { match: @favorite })}"); 5 6app/views/favorites/create.js.haml:1 7

足情報(FW/ツールのバージョンなど)

ruby

1ruby '2.6.5' 2 3# Bundle edge Rails instead: gem 'rails', github: 'rails/rails' 4gem 'rails', '~> 6.0.0' 5# Use mysql as the database for Active Record 6gem 'mysql2', '>= 0.4.4' 7# Use Puma as the app server 8gem 'puma', '~> 3.11' 9# Use SCSS for stylesheets 10gem 'sass-rails', '~> 5' 11# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker 12gem 'webpacker', '~> 4.0' 13# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks 14gem 'turbolinks', '~> 5' 15# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder 16gem 'jbuilder', '~> 2.7' 17省略 18 19gem 'jquery-rails' 20

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問