Быстрый способ:
Измените эту строку:
patch 'video/show/:id/update' => 'freelancers#video_update'
На:
patch 'video/show/:id/update' => 'freelancers#video_update', as: :update_video
Это создаст update_video_path
в качестве именипомощник в вашем приложении.Тогда вы сможете использовать его:
<%= form_for(@video, :html => { :multipart => true, :id => @video.id, :url => update_video_path(@video) }, method: :patch ) do |f| %>
Вы можете проверить документацию для получения дополнительной информации.
Правильный путь:
Похоже, вам нужно реорганизовать ваши маршруты и контроллеры.Это хорошая практика, когда ваш контроллер охватывает один ресурс.В вашем случае кажется, что вам нужно как минимум два контроллера: FreelancersController
и VideosController
, а ресурсы videos
должны быть вложены в freelancers
.
Например, это может выглядеть так:
root 'freelancers#index'
resources :freelancers, only: [:index, :new] do
collection do
get :design
post :category
resources :videos, only: [:index, :new, :create, :show, :edit, :update]
end
end
Я оставил design
и category
в этом примере как есть, но, вероятно, эти маршруты также нуждаются в отдельных контроллерах.
Этот способ лучше, потому что:
Маршруты становятся более понятными и более поддерживаемыми
Ваши контролеры ответственны только за один ресурс каждый
Вы получаетекуча помощников по путям и URL без дополнительной работы
Ваше приложение следует соглашениям
Конечно, если выМне нужно настроить URL-адреса приложений, Rails предоставляет вам способ, но в большинстве случаев лучше придерживаться соглашения.
Дополнительную информацию можно найти в документации .