Правильный способ ПОЛУЧИТЬ ресурс Rails по их идентификатору или другому уникальному полю? - PullRequest
0 голосов
/ 08 мая 2020

У нас есть API, в котором мы можем ПОЛУЧИТЬ пользователя двумя способами:

  1. Через его сгенерированный по умолчанию Rails id (уникальный, автоинкремент)
  2. Через уникальное поле employee_id (идентификатор сотрудника во внешней системе, у нас нет связанного контроллера / модели / таблицы сотрудника)

Вот как он отображается в виде URI:

/users/:id
/users/employee_id/:employee_id

Оба отправляют вызов методу users#show, который будет искать либо params[:id], либо params[:employee_id], а затем возвращать пользователя, если он существует.

Я не могу сказать почему, но второй URI кажется неправильным.

Какой стандартный или лучший способ доступа к ресурсу с разными уникальными идентификаторами?

Мы думаем сделать это, используя два вызова (сначала на index, чтобы получить пользователей, соответствующих employee_id, затем show, чтобы получить информацию о пользователе из id, который мы получили), но мне любопытны альтернативы.

1 Ответ

1 голос
/ 09 мая 2020

Это не очень успокаивает.

Можно попробовать что-то вроде этого ...

Добавить нересурсный маршрут ...

get 'employees(/:employee_id)', to: 'users#employee'

добавить employee для вашего пользовательского контроллера, который будет искать пользователя по предоставленному идентификатору

  def employee
    @user = User.find_by(employee_id: params[:employee_id])
    render json: @user
  end

, и теперь у вас есть спокойный API

/users/:id
/employees/:employee_id
...