Обрабатывать не REST-логику в Rails API - PullRequest
0 голосов
/ 30 июня 2018

Например, допустим, у меня есть ресурс Post. С GET /posts я получаю все сообщения (index action). Что, если я хочу получить последние сообщения (сообщения с большим количеством лайков за последние 24 часа)? Должен ли я реализовать логику в действии index (через параметр) или мне следует реализовать новое действие trending, которое отвечает новой конечной точке GET /trending, что делает API не REST?

Примечание: я прочитал эту статью и понимаю способ выбора параметров, но не могу понять, как работает добавление дополнительной конечной точки ...

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

вы можете сделать оба. Я бы выбрал новое действие. Но вы можете передать дополнительный параметр и по ссылке:

link_to posts_path(trending: true)

В вашем контроллере вы можете проверить, если params[:trending].present?, а затем передать только переменную сообщений @posts трендовые сообщения.

Вы также можете назначить индикатор трендов для переменной, которая будет передана в индексное представление, чтобы можно было адаптировать макет (изменить заголовок с «публикаций» на «трендовые публикации») с помощью if params[:trending].present? then @trending = true end

Создание нового действия делает контроллеры и представления менее загроможденными условиями (if ...)

Кстати, создание нового действия все еще остается REST-логикой, если вы сделаете запрос GET. Если ваше новое действие было связано с обновлением сообщения, это должен быть PATCH запрос

0 голосов
/ 30 июня 2018

Вероятно, у вас есть resource :posts внутри вашего routes.rb. Это место, где вы должны добавить новую конечную точку. По рельсам проложен маршрут к новому действию.

У вас есть

resources :posts

Вы должны иметь

resources :posts do
  get 'trending', on: :collection
end

Теперь вы можете видеть все маршруты, которые вам генерируют рельсы line, index, show, create, update... и еще один trending

/posts/trending

Вы можете посмотреть здесь: Направляющие рельсов добавить отдых

...