Как определить 2 маршрута для разделения 2 категорий 1 объекта в Ruby на Rails 5.2? - PullRequest
0 голосов
/ 10 марта 2020

Мое приложение управляет бизнес-объектами. У меня есть 2 категории бизнес-объектов:

  1. «Шаблонные» бизнес-объекты
  2. «Реализованные» бизнес-объекты

Они идентичны, но «Реализованные» члены категории всегда ссылаются на «шаблон» и имеют некоторые поля, которые отображаются в режиме редактирования только для чтения. Так что у меня только 1 класс и 1 контроллер. Флаг is_template помечает шаблон Business Objects.

Теперь новое требование требует, чтобы эти две категории были разделены на уровне маршрутизации. На одном маршруте можно управлять только «шаблонными» бизнес-объектами, на другом маршруте можно управлять «реализованными» бизнес-объектами. Оба через один и тот же контроллер. Я попробовал следующее, но не знаю, как с этим справиться:

  resources :business_objects, :path => "template_metadata" do
    resources :skills       # Attributes of a business object
    member do
      post :new_version     # Manage some flags for templates
      post :make_current
      post :finalise
    end
    collection do
      get :index_used      # Former way to list only implemented business objects
    end
  end

  resources :implemented_objects, controller: 'business_objects' do
    resources :skills       # Attributes of a business object
  end

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 11 марта 2020

Похоже, вам нужно добавить дополнительный параметр в ваши маршруты, чтобы вы могли проверить, какой тип объекта находится в вашем контроллере. Если вы оберните ваши маршруты в область с именованным параметром, он может передать это вашему контроллеру. Например,

scope ":type", constraints: { :type => /(template|implemented)/ } do
  resources :business_objects, :path => "template_metadata" do
    resources :skills       # Attributes of a business object
    member do
      post :new_version     # Manage some flags for templates
      post :make_current
      post :finalise
    end
    collection do
      get :index_used      # Former way to list only implemented business objects
    end
  end

  resources :implemented_objects, controller: 'business_objects' do
    resources :skills       # Attributes of a business object
  end
end

заставит все эти маршруты иметь префикс type, и вы сможете получить доступ к params[:type] в вашем контроллере. Часть constraints: { :type => /(template|implemented)/ } гарантирует, что единственными типами являются template или implemented.

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