Используйте тот же контроллер с ассоциациями в путях верхнего уровня и вложенных в Rails - PullRequest
0 голосов
/ 02 апреля 2020

Я бы хотел, чтобы у моего REST API было несколько маршрутов, например:

GET /posts/
GET /posts/1
POST /posts

GET /users/
GET /users/1
GET /users/1/posts
POST /users/1/posts

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

1 Ответ

1 голос
/ 02 апреля 2020

Похоже, вы хотите вложенные маршруты. Попробуйте это ваш config / rout.rb

resources :posts
resources :users do
  resources :posts
end

Это имеет больше информации. Вы также можете использовать методы глагола match или post и get по отдельности. Есть также много вариантов для вложенных маршрутов. https://guides.rubyonrails.org/routing.html.

АЛЬТЕРНАТИВНО

в config / rout.rb:

get 'users/:id/posts', to: 'users#posts'

и в controllers / users_controller.rb

before_action :set_user, only: [:users_posts, :show, :edit, :update, :destroy]
...
def posts
  @posts = @user.posts
end

Со вторым вариантом вы можете KISS, сохранив POST / PATCH / UPDATE / DESTROY в их родном доме, например / posts и / posts / 42. Просто обработайте: user_id как переменную формы в этом случае с любой дополнительной проверкой, которая вам может понадобиться, возможно, ссылаясь на переменную сеанса.

LASTLY

Вы можете фактически поместить это в свою конфигурацию / маршруты. гь. Но теперь вы, вероятно, пишете новые формы, потому что: user_id - это параметр маршрута. Я бы подал это под дополнительной сложностью. Возможно, это соответствует вашей ситуации.

post 'users/:id/posts', to: 'users#posts_create'
...