У меня есть приложение Rails (4.2.6), которое имеет таблицы типа companies (id, serial...), user (id, serial, company_id...)
, где serial - случайная сгенерированная строка длиной 5-20 символов и уникальная для каждой таблицы. То, что я пытаюсь добиться, чтобы иметь маршруты, как /companies/:serial
и /users/:serial
...Rails - переопределяющие параметры параметров маршрута - GLOBALLY
Я прочитал documentation, и может сделать следующее routes.rb
:
resources :companies, param: :serial
resources :users, param: :serial
Теперь, это не слишком DRY .. Есть ли способ сделать это глобально? Я знаю, что я мог бы иметь это в одной строке (resources :companies, :users, param: :serial
), но у меня есть другие таблицы в других пространствах имен, к которым я также хотел бы применить правило.
Еще одна вещь, о которой я думал, заключалась в том, чтобы иметь серийный номер в качестве первичного ключа, но я предпочитаю автоинкрементное целое число и не хочу засорять мой db столбцами, такими как user.company_serial
с 10-20 символами длинными значениями ...
Я попытался сделать сферу с param: :serial
вокруг моих ресурсов:
scope param: :serial do
resources :companies
...
end
как с path_names
(читать here в документации), но это не дало желаемого результата, а не добавил params[:param]
с символом значение :serial
почему-то я действительно не понимаю.
Я также знаю о существовании метода to_param
, но если бы я хорошо понял, я должен использовать его в моделях, поэтому мне пришлось бы писать один и тот же код столько раз, сколько у меня есть у меня.
Явное указание на каждый стол не обязательно плохо. Время от времени DRY заходит слишком далеко в Ruby (прочитайте исходный код скрепки). Я думаю, что каждая таблица, явно определяющая его последовательные ресурсы в локальном пространстве, прекрасна. Однако сочетание первых двух строк в одном кажется практичным. – Pyrce
@Pyrce, вы правы, но я хотел бы применить правило для всего приложения, и я чувствую, что sheperd начал перечислять овец, как «sheep1 is white, sheep2 is white, sheep3 is white ...» со всеми 400 он вместо того, чтобы сказать, что все овцы белые ... В конце концов, это то, что я собираюсь делать, если нет другого пути – Misu