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

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

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

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

JavaScript

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

jQuery

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

Ajax

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

Q&A

解決済

1回答

1575閲覧

Ajax通信でお気に入り機能を実装したい

taka3344

総合スコア8

Ruby on Rails

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

JavaScript

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

jQuery

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

Ajax

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

0グッド

0クリップ

投稿2021/02/17 17:22

編集2021/02/18 01:24

前提・実現したいこと

jqueryとrubyを使用したお気に入り機能を実装しようと思っているのですが
記事を読みながらコードを書いたところ、うまく適応されず原因も特定できていません。
主にコントローラーやルーティングエラーかと思っています。

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

Routing Error No route matches [GET] "/items/1/favorites" Rails.root: /Users/noah/projects/jewel-app Application Trace | Framework Trace | Full Trace Routes Routes match in priority from top to bottom というエラーがコンソールに初めから出てしまっています。 ↑解決しました ------------------------------------------------------------------------------------ また、いいねボタンをクリックすると追加で VM826 application-34…e09f93ac287.js:1616 ITEM http://localhost:3000/items/1/favorites 500 (Internal Server Error) ./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js.Rails.ajax @ VM826 application-34…e09f93ac287.js:1616 ./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js.Rails.handleRemote @ VM826 application-34…e09f93ac287.js:2052 (anonymous) というエラーが出ます。

該当のソースコード

ルーティング
resources :items, except: :index do collection do get 'search' end resources :orders, only: [:index, :create] resources :favorites, only: [:create, :destroy] end
favoritesコントローラー
class FavoritesController < ApplicationController before_action :set_item # お気に入り登録 def create if @item.user_id != current_user.id @favorite = Favorite.create(user_id: current_user.id, item_id: @item.id) end end # お気に入り削除 def destroy @favorite = Favorite.find_by(user_id: current_user.id, item_id: @item.id) @favorite.destroy end private def set_item @item = Item.find(params[:item_id]) end end
items/index
<% if @items.length > 0 %> <% @items.each do |item| %> <li class='list'> <%= link_to item_path(item.id),class: "default_link_none" do %> <div class='item-img-content'> <%= image_tag item.image, class: "item-img" %> <% if item.order != nil %> <div class='sold-out'> <span>Sold Out!!</span> </div> <% end %> </div> <div class='item-info'> <h3 class='item-name'> <%= item.name %> </h3> <div class='item-price'> <span><%= item.price %>円<br><%= item.shopping_fee.name %></span> <div class='star-btn' id="like_<%= item.id %>"> <%= render "favorites/favorite", item: item %> </div> </div> </div> <% end %>
_favorite.html.haml
#favorite{ id: item.id } - if !Favorite.exists?(user: current_user, item_id: item.id) = link_to item_favorites_path(item), method: :item, remote: true, class: "favorite-btn favorite-item" do .i.far.fa-thumbs-up %span いいね! = item.favorites.length - else = link_to item_favorites_path(item), method: :delete, remote: true, class: "favorite-btn favorite-delete" do .i.far.fa-thumbs-up %span いいね! = item.favorites.length
create.erb
$("#favorite_<%= @item.id %>").html("<%= j(render partial: 'favorites/favorite', locals: { item: @item }) %>");
destroy.erb
ソースコード $("#favorite_<%= @item.id %>").html("<%= j(render partial: 'favorites/favorite', locals: { item: @item }) %>");
favoriteモデル
class Favorite < ApplicationRecord belongs_to :user belongs_to :item validates_uniqueness_of :item_id, scope: :user_id end
item モデル
class Item < ApplicationRecord extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :category belongs_to :state belongs_to :shopping_fee belongs_to :shopping_day belongs_to :area belongs_to :seller has_one :order has_one_attached :image has_many :favorites, dependent: :destroy

試したこと

ルーティングができていないのかと思い、rails routesで確認しました。
item_favorites POST /items/:item_id/favorites(.:format) favorites#create
item_favorite DELETE /items/:item_id/favorites/:id(.:format) favorites#destroy
と、しっかりルーティングはできていました。
この先どのようにエラー解決していくかわかりません...
初心者ですので、教えていただければ幸いです。よろしくお願いいたします。

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

しっかりルーティングはできていました。

いえ、エラーは存在しないルーティングのrequest methodがGETであることを指摘しています。

No route matches [GET]

提示された内容からすると、POSTとDELETEはルーティングにあるようです。

item_favorites POST /items/:item_id/favorites(.:format) favorites#create

item_favorite DELETE /items/:item_id/favorites/:id(.:format) favorites#destroy

このルーティングを使いたいのでしたら、request methodをそれぞれPOST/DELETEで投げるように調整してみてください。

投稿2021/02/17 22:25

編集2021/02/17 22:27
m.ts10806

総合スコア80875

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

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

taka3344

2021/02/18 01:16

回答ありがとうございます。 教えていただいた通り、 _favorite.html.hamlファイルの三行目 link_to item_favorites_path(item), method: :item, を link_to item_favorites_path(item), method: :post,に変更したところルートエラーは出なくなりました。 ありがとうどざいます。 しかし、まだいいね機能が作用されず、追記で教えていただけると助かります。 いいねボタンクリックと同時に上で書いたものが出ます 。 どうかよろしくお願いいたします
m.ts10806

2021/02/18 01:20

「上で書いたもの」とは、なんのことでしょう。
taka3344

2021/02/18 01:28

VM826 application-34…e09f93ac287.js:1616 ITEM http://localhost:3000/items/1/favorites 500 (Internal Server Error) ./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js.Rails.ajax @ VM826 application-34…e09f93ac287.js:1616 ./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js.Rails.handleRemote @ VM826 application-34…e09f93ac287.js:2052 (anonymous) こちらになります。 localhostで立てたサイトを検証し、ボタンクリックした際にコンソールに現れたエラーになります。 よろしくお願いいたします。
m.ts10806

2021/02/18 01:37

500エラーは多岐に渡ります。 それこそ構文のミスからなにから 一部だけではなんとも言えない部分があります。 エラー拾った箇所が明示されてるようですし、関連箇所を追ってみてください。
taka3344

2021/02/18 02:16

返信ありがとうございます! エラーの件は解決できました! コントローラーのcreateアクションの@item.user_id != current_user.idを @item.sellerr_id !にすることでエラーは消えました。 しかし、favoriteテーブルに保存できておらず、ターミナルを見てもエラーなどは出ていないようです。クリエイトアクションがおかしいのでしょうか。 何度もすみませんが確認していただけないでしょうか。 Started POST "/items/1/favorites" for ::1 at 2021-02-18 11:03:48 +0900 Processing by FavoritesController#create as JS Parameters: {"item_id"=>"1"} Item Load (0.7ms) SELECT `items`.* FROM `items` WHERE `items`.`id` = 1 LIMIT 1 ↳ app/controllers/favorites_controller.rb:19:in `set_item' User Load (0.5ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1 ↳ app/controllers/favorites_controller.rb:7:in `create' Rendering favorites/create.erb Favorite Exists? (0.4ms) SELECT 1 AS one FROM `favorites` WHERE `favorites`.`user_id` = 1 AND `favorites`.`item_id` = 1 LIMIT 1 ↳ app/views/favorites/_favorite.html.haml:2 Favorite Load (0.3ms) SELECT `favorites`.* FROM `favorites` WHERE `favorites`.`item_id` = 1 ↳ app/views/favorites/_favorite.html.haml:6 Rendered favorites/_favorite.html.haml (Duration: 4.6ms | Allocations: 1730) Rendered favorites/create.erb (Duration: 5.1ms | Allocations: 1842) Completed 200 OK in 13ms (Views: 5.1ms | ActiveRecord: 2.0ms | Allocations: 4597) よろしくお願いいたします
m.ts10806

2021/02/18 06:34

その後何もなく急に解決とされたようですが、結局どのように解決と至ったのでしょうか
taka3344

2021/02/23 09:01

返信遅れてすみません! destroyアクションのパス指定に関して itemコントローラーにfavoriteコントローラーをネストしていたため id指定が二つ必要だったみたいで item_favorite_path(item, item.favorites.ids)とパスを変更することでうまくアクションが作用するようになりました! ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問