Запутывающие идентификаторы в приложении Rails - PullRequest
1 голос
/ 12 мая 2010

Я пытаюсь скрыть все идентификаторы, которые покидают сервер, т. Е. Идентификаторы, появляющиеся в URL и в выводе HTML.

Я написал простую библиотеку Base62, в которой есть методы кодирования и декодирования. Определение или, что лучше, перезапись метода id в ActiveRecord для возврата закодированной версии id и настройка контроллера для загрузки ресурса с декодированным params[:id] дает мне желаемый результат. Идентификаторы теперь в кодировке base62, а в ответе отображается правильный ресурс.

Теперь я начал замечать, что субресурсы, определенные через has_many отношения, не загружаются. например У меня есть запись под названием User, что has_many Post s. Теперь User.find(1).posts пусто, хотя есть сообщения с user_id = 1. Мое объяснение состоит в том, что ActiveRecord должен сравнивать user_id из Post с методом id из User - который я перезаписал - вместо сравнения с self[:id]. Так что в основном это делает мой подход бесполезным.

Я хотел бы иметь что-то вроде определения obfuscates_id в модели, и об остальном позаботится, т. Е. Выполнить все кодирование / декодирование в соответствующих местах и ​​не допустить, чтобы идентификаторы были возвращены сервером .

Есть ли доступный драгоценный камень или у кого-нибудь есть подсказка, как это сделать? Могу поспорить, я не первый, кто пытается это сделать.

1 Ответ

3 голосов
/ 12 мая 2010

То, что вы описываете, звучит как специализированное приложение URL-слага. Взгляните на плагины, такие как Act_S_Sluggable или friendly_id. Также обратите внимание на переопределение метода to_param в вашей модели User.

Может быть, начать здесь: Лучшая Постоянная ссылка для Rails

...