Как я могу поместить значения объекта в URL в Rails? - PullRequest
0 голосов
/ 25 декабря 2018

Я хочу изменить значение в объекте.Однако измененная маршрутизация не работает должным образом.

#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, но фактическим выводом является видео.3

1 Ответ

0 голосов
/ 25 декабря 2018

Быстрый способ:

Измените эту строку:

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 в этом примере как есть, но, вероятно, эти маршруты также нуждаются в отдельных контроллерах.

Этот способ лучше, потому что:

  1. Маршруты становятся более понятными и более поддерживаемыми

  2. Ваши контролеры ответственны только за один ресурс каждый

  3. Вы получаетекуча помощников по путям и URL без дополнительной работы

  4. Ваше приложение следует соглашениям

Конечно, если выМне нужно настроить URL-адреса приложений, Rails предоставляет вам способ, но в большинстве случаев лучше придерживаться соглашения.

Дополнительную информацию можно найти в документации .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...