前提・実現したいこと
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/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/18 01:16
2021/02/18 01:20
2021/02/18 01:28
2021/02/18 01:37
2021/02/18 02:16
2021/02/18 06:34
2021/02/23 09:01