Как писать маршруты прямо в Ruby -on-Rails? - PullRequest
0 голосов
/ 21 марта 2020

В моем файле routes.rb есть следующий код:

Rails.application.routes.draw do
  get 'getTodos', to: 'todos#get'
  get 'getUsers', to: 'users#get'
  get 'getStates', to: 'states#get'

  post 'addTodo', to: 'todos#add'
  post 'addUser', to: 'users#add'

  delete 'deleteTodo/*id', to: 'todos#delete'
  delete 'deleteUsers/*IDs', to: 'users#delete'
  delete 'deleteAllTodos', to: 'todos#delete_all'

  put 'updateTodo', to: 'todos#update'
end

Как я могу изменить этот код, чтобы сделать его более красивым и правильным?

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Самая большая проблема с этим кодом заключается в том, что он полностью unidiomati c. В Rails вы создаете, считываете, обновляете и уничтожаете (CRUD) ресурсы по следующим маршрутам:

HTTP Method   Path                       Controller#Action
GET           /todos(.:format)           todos#index
POST          /todos(.:format)           todos#create
GET           /todos/new(.:format)       todos#new
GET           /todos/:id/edit(.:format)  todos#edit                                                              GET           /todos/:id(.:format)       todos#show
PATCH         /todos/:id(.:format)       todos#update
PUT           /todos/:id(.:format)       todos#update
DELETE        /todos/:id(.:format)       todos#destroy

Ключ здесь - это сочетание метода HTTP и пути.

  • GET /todos возвращает вам все задачи, а GET /todos/:id показывает определенный ресурс c.
  • GET /todos/new отображает форму для создания нового задания. POST /todos фактически создает ресурс из представления формы.
  • GET /todos/:id/edit отображает форму для редактирования задачи. PATCH /todos/:id фактически обновляет ресурс после отправки формы.
  • DELETE /todos/:id - Вы должны быть в состоянии угадать, что это делает.

Вы можете сгенерировать эти маршруты с помощью:

Rails.application.routes.draw do
  resources :todos
end

Если вы хотите определить маршруты, которые удаляют все задачи RESTful, это должно быть определено как DELETE /todos (без идентификатора).

Rails.application.routes.draw do
  resources :todos do
    delete '/', on: :collection, action: :destroy_all
  end
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end

См .:

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

Я бы сделал что-то подобное. Попробуйте использовать REST-действия Rails по умолчанию вместо того, чтобы перезаписывать их

Rails.application.routes.draw do
  resources :todos, only: [:index, :create, :update, :destroy] do
    collection do
      delete :delete_all, to: 'todos#delete_all'
    end
  end
  resources :users, only: [:index, :create, :destroy]
  resources :states, only: :index
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...