Я пытаюсь добавить функцию закладки в свое приложение. Я создал маршруты в файле rout.rb и добавил ссылку на мою страницу показа, чтобы пользователь мог сохранить прическу. Когда я нажимаю на него, это дает мне следующую ошибку. ActionController::UrlGenerationError in Hairstyles#show
и,
No route matches {:action=>"update", :controller=>"saved_hairstyles", :id=>"21"}, missing required keys: [:hairstyle_id]
Я слежу за этим видео , что здорово до этого момента.
Вот мой репо для простоты понимания.
saved_hairstyles_controller.rb
(определено только для метода обновления):
class SavedHairstylesController < ApplicationController
def update
saved_hairstyle = SavedHairstyle.where(hairstyle:
Hairstyle.find(params[:hairstyle]), user: current_user)
if saved_hairstyle == []
SavedHairstyle.create(hairstyle: Hairstlye.find(params[:hairstyle]), user:
current_user)
@saved_hairstyle._exists = true
else
saved_hairstyle.destroy_all
@saved_hairstyle_exists = false
end
respond_to do |format|
format.html {}
format.js {}
end
end
end
Моя ссылка в файле views>hairstyles>show.html.erb
, это та, которая дает мне ошибку,
<%= link_to 'save hairstyle', hairstyle_saved_hairstyle_path(hairstyle: @hairstyle) %>
routes.rb
выглядит следующим образом,
Rails.application.routes.draw do
root to: 'pages#home'
devise_for :users
resources :hairstyles do
member do
put "like", to: "hairstyles#upvote"
put "dislike", to: "hairstyles#downvote"
end
resources :comments, only: :create
resources :saved_hairstyles, only: [:update]
end
resources :saved_hairstyles, only: :destroy
resources :comments, only: :destroy
resources :hairdressers
end
Дополнение к вопросу: я также проверил `` грабли маршрутов | grep save_hairstyles` и у меня есть следующие маршруты:
hairstyle_saved_hairstyle PATCH /hairstyles/:hairstyle_id/saved_hairstyles/:id(.:format) saved_hairstyles#update
PUT /hairstyles/:hairstyle_id/saved_hairstyles/:id(.:format) saved_hairstyles#update
saved_hairstyle DELETE /saved_hairstyles/:id(.:format) saved_hairstyles#destroy```