ルート関連のエラーでなかなか自力で解決できなかったので質問させていただきます。
タイトル通りRouting Errorなのですが、現在ECサイトを作成していまして、そこでお気に入り機能を追加しようとしたらエラーが出てきてしまいました。
実際やったことはお気に入りに追加する機能と、お気に入りから削除する機能の導入です。追加する方は問題なくできたのですが削除の方でのエラーが起きました
エラー内容は、No route matches [DELETE] "/products/16/favorites"と出てきて、該当のルートは、
product_favorite_path DELETE /products/:product_id/favorites/:id(.:format)
favorites#destroy
成功した追加の方のルートは
product_favorites_path POST /products/:product_id/favorites(.:format)
favorites#create
となっています。実際の記述は
views/store/index.html.erb
<% @products.each do |product| %> <% if product.favorited_by? current_user %> <%= link_to "お気に入り解除", product_favorites_path(product), method: :delete %> <% else %> <%= link_to "お気に入り追加", product_favorites_path(product), method: :post %> <% end %> <% end %>
favorites.controller.rb
class FavoritesController < ApplicationController before_action :authenticate def create @product = Product.find(params[:product_id]) @favorite = current_user.favorites.build(product: @product) if @favorite.save redirect_to store_path, notice:"お気に入りに登録しました" else redirect_to store_path, notice:"この商品はお気に入りに登録できません" end end def destroy @favorite = current_user.favorites.find_by!(product_id: params[:product_id]) @favorite.destroy redirect_to store_path, notice:"お気に入りを解除しました" end end
favorite.rb
class Favorite < ApplicationRecord belongs_to :product belongs_to :user validates :user, presence: true validates :user_id, uniqueness:{scope: :product_id} validates :product, presence: true end
routes.rb
resources :users, only: [:index, :show] do get :favorites, on: :member end resources :products do resources :favorites, only: [:create, :destroy] get :who_bought, on: :member end
関係していそうな箇所だけピックアップしてみました。
以上になります。
個人的にきになる所は、最初のルートの表示でお気に入り追加のパスがproduct_favorites_pathでエラーの削除の方がproduct_favorite_pathと、favoritesとfavoriteといふうに[s]の差がある所と、削除の方のパスの/products/:product_id/favorites/:id(.:format)となってる最後のidが怪しいとは思っているのですが、これをどうしたらいいのかわからず質問に至りました。
もし改善案などわかる方いましたらご教授の方宜しくお願いしますm(._.)m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/11 07:50