Как определить restfull routes для разделения 2 категорий 1 класса с Rails 5.2? - PullRequest
0 голосов
/ 07 мая 2020

Я уже работал над этой топи c, но нашел только частичное решение. Вот лучше объяснение проблемы:

Я управляю 2-мя категориями бизнес-объектов:

  1. Определенные бизнес-объекты, которые можно рассматривать как шаблоны (есть флаг is_template = true)
  2. Используемые бизнес-объекты, которые являются копиями предыдущих, реализованных, с небольшими отличиями

У меня 3 ожидания по поводу маршрутизации:

  1. Положитесь на помощников, таких как used_business_objects_path или new_defined_business_object_path

  2. Отображайте удобные для пользователя URL-адреса, такие как / used_metadata / new (metatada - это имя, которое мой клиент запрашивает для отображения вместо бизнес-объекта)

  3. Распространение переменной типа, которая будет использоваться контроллером

Я бы хотел построить для них эффективный маршрут, включая параметр для контроллера к какому типу объекта он должен выбрать:

  # GET /business_objects
  # GET /business_objects.json
  def index
    if params[:type] == 'defined'
      @business_objects = BusinessObject.joins(translated_objects).pgnd(current_playground).defined.visible.search(params[:criteria]).
      select(index_fields).order(order_by).paginate(page: params[:page], :per_page => paginate_lines)
    else
      @business_objects = BusinessObject.joins(translated_objects).pgnd(current_playground).used.visible.search(params[:criteria]).
        select(index_fields).order(order_by).paginate(page: params[:page], :per_page => paginate_lines)
    end

Я реализовал маршрут с ограниченной областью действия, основанный на предложении Ника Гарретта :

* 103 3 *

К сожалению, это генерирует URL как / type / type_metadata? Type = used, и помощники, похоже, не рассматривают тип как параметр.

Прочитав руководство по маршрутизации Rails, я не уверен, что то, чего я пытаюсь достичь, возможно. Вы можете помочь найти решение для этого? Большое спасибо!

1 Ответ

0 голосов
/ 07 мая 2020

Если я правильно понимаю, что вы здесь пытаетесь сделать, вы можете это сделать с помощью проблем маршрутизации :

# have absolutely no clue what to name this
concerns :business_object do
  resources :skills                   
  resources :skills_imports, only: [:new, :create]
  resources :scopes
  member do
    post :new_version
    post :make_current
    post :finalise
    post :activate
    post :open_cart     # Declares that the current business object collects skills as a cart
    post :close_cart    # Unsets the current business as cart
    get  :derive
  end
  collection do
    get :index_all
  end
end

resources :used_business_objects, concerns: :business_object 
resources :defined_business_objects, concerns: :business_object

Я бы не стал возиться с этим параметром типа. Просто используйте наследование и настройте два класса контроллера.

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