我想修改对象中的值。但是,修改后的路由无法正常工作。
#routes
root 'freelancers#index'
get 'new' => 'freelancers#new'
post 'category' => 'freelancers#category'
get 'video' => 'freelancers#video'
get 'video/show/:id' => 'freelancers#video_show'
get 'video/new' => 'freelancers#video_new'
post 'video/create' => 'freelancers#video_create'
get 'video/:id/edit' => 'freelancers#video_edit'
patch 'video/show/:id/update' => 'freelancers#video_update'
get 'design' => 'freelancers#design'
表单代码:
<%= form_for(@video, :html => { :multipart => true, :id => @video.id, :url => '/video/show/:id/update' }, method: :patch ) do |f| %>
我希望输出/ video / show / 3 / update 但实际输出是video.3
答案 0 :(得分:1)
快速方式:
更改此行:
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| %>
您可以检查the documentation以获得更多信息。
正确的方法:
似乎您需要重构路由和控制器。当您的控制器覆盖一种资源时,这是一个好习惯。在您的情况下,似乎至少需要两个控制器: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
,但是这些路由可能也需要单独的控制器。
这种方法更好,因为:
路线变得更加容易理解和支持
您的控制器仅负责一个资源
一堆path and URL helpers无需其他工作即可
您的应用程序遵循约定
当然,如果您需要自定义应用程序URL,Rails会为您提供方法,但是在大多数情况下,遵循约定会更好。
您可以在the documentation中找到更多信息。