Чрезмерное использование настроек маршрута - customize_count (Rails 5) - PullRequest
0 голосов
/ 16 ноября 2018

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

чрезмерное использование настроек маршрута (customize_count> 8)

  resources :stores do
    collection do
      get :api
    end
    member do
      get :printer
      get :delete
      get :inventory
      delete :inventory
      get :daysheet
      get :detailed_daysheet
      get :labels
      patch :restore
      patch :print_labels
      post :daysheet
    end
  end

В результате чего эти пути:

api_stores_path GET /stores/api(.:format) stores#api
printer_store_path  GET /stores/:id/printer(.:format) stores#printer
delete_store_path GET /stores/:id/delete(.:format)  stores#delete
inventory_store_path  GET /stores/:id/inventory(.:format) stores#inventory
daysheet_store_path GET /stores/:id/daysheet(.:format)  stores#daysheet
detailed_daysheet_store_path  GET /stores/:id/detailed_daysheet(.:format) stores#detailed_daysheet
labels_store_path GET /stores/:id/labels(.:format)  stores#labels
DELETE  /stores/:id/inventory(.:format) stores#inventory
restore_store_path  PATCH /stores/:id/restore(.:format) stores#restore
print_labels_store_path PATCH /stores/:id/print_labels(.:format)  stores#print_labels
POST  /stores/:id/daysheet(.:format)  stores#daysheet

После рефакторинга мне нужно, чтобы он по-прежнему функционировал, как сейчас с get маршрутами, такими как /stores/7/inventory и /stores/18/printer

Как мне сжать эти маршруты получения для достижения тех же целей маршрутизации?

1 Ответ

0 голосов
/ 16 ноября 2018

Один из подходов заключается в следующем:

resources :stores do
  scope module: :stores do 
    resource  :printer,           only: [:show]
    resource  :daysheet,          only: [:show, :create]
    resource  :detailed_daysheet, only: [:show]
    resource  :inventory,         only: [:show, :destroy]
    resources :labels,            only: [:index]
    resources :print_labels,      only: [:update]
    resource  :restore,           only: [:update]
  end
  collection do
    get :api
  end
  member do
    get :delete
  end
end  

Что дает вам:

          store_printer GET    /stores/:store_id/printer(.:format)              stores/printers#show
         store_daysheet GET    /stores/:store_id/daysheet(.:format)             stores/daysheets#show
                        POST   /stores/:store_id/daysheet(.:format)             stores/daysheets#create
store_detailed_daysheet GET    /stores/:store_id/detailed_daysheet(.:format)    stores/detailed_daysheets#show
        store_inventory GET    /stores/:store_id/inventory(.:format)            stores/inventories#show
                        DELETE /stores/:store_id/inventory(.:format)            stores/inventories#destroy
           store_labels GET    /stores/:store_id/labels(.:format)               stores/labels#index
      store_print_label PATCH  /stores/:store_id/print_labels/:id(.:format)     stores/print_labels#update
                        PUT    /stores/:store_id/print_labels/:id(.:format)     stores/print_labels#update
          store_restore PATCH  /stores/:store_id/restore(.:format)              stores/restores#update
                        PUT    /stores/:store_id/restore(.:format)              stores/restores#update
             api_stores GET    /stores/api(.:format)                            stores#api
           delete_store GET    /stores/:id/delete(.:format)                     stores#delete
                 stores GET    /stores(.:format)                                stores#index
                        POST   /stores(.:format)                                stores#create
              new_store GET    /stores/new(.:format)                            stores#new
             edit_store GET    /stores/:id/edit(.:format)                       stores#edit
                  store GET    /stores/:id(.:format)                            stores#show
                        PATCH  /stores/:id(.:format)                            stores#update
                        PUT    /stores/:id(.:format)                            stores#update
                        DELETE /stores/:id(.:format)                            stores#destroy

Естественно, для этого необходимо создать несколько новых вложенных контроллеров, таких как Stores::Printers, которые будут находиться в app/controllers/stores/printers_controller.rb. Но теперь вы используете стандартные маршруты RESTful, что, я думаю, для некоторых людей является хорошей вещью.

Кроме того, для ваших вложенных маршрутов в параметрах будет :store_id вместо id.

То, что collection api и member delete все еще кажутся странными, но я не уверен, каково это намерение.

...