#ruby-on-rails
Вопрос:
В моем приложении Rails я хочу разрешить своим находчивым маршрутам получать запись либо с помощью параметра UUID, либо с помощью Slug.
В принципе, я хочу /users/aafdbc47-b427-4be9-bf4b-4b6c4e9b8303
или /users/sireltonjohn
хочу работать. Это два отдельных поля в моей схеме, UUID и Slug соответственно. В первую очередь, поэтому у меня есть неизменяемая прямая ссылка на пользователя (поскольку пользователь может изменить свой слиток).
Я относительно новичок в Rails, поэтому пытаюсь понять, как в моем файле routes.rb разрешить работу этого маршрута.
Ответ №1:
Оба /users/aafdbc47-b427-4be9-bf4b-4b6c4e9b8303
и /users/sireltonjohn
направляются к users/:id
тому, от чего происходит show
действие UsersController
(если мы следуем по рельсовым конвейерам)
Вот простой способ сделать это (написал это от ума)
# app/controllers/users_controller.rb
class UsersController < ApplicationRecord
before_action :find_user, only: :show
def show
p @user
end
private
def find_user
@user = User.where('uuid = :key OR slug = :key', key: params[:id]).first
end
end
# routes.rb
resources :users
Вы могли бы проверить friendly_id, посмотреть, подходит ли он вам.