ActiveRecord работает по принципу, что каждая таблица имеет один столбец первичного ключа, который не имеет значения в домене приложения. Вот почему (частично) вам не нужно определять столбец id
в ваших create_table
миграциях. Имя столбца (и его тип) можно изменить, в основном, для адаптации к устаревшим схемам, а первичные ключи с несколькими столбцами трудно реализовать вообще.
В тот момент, когда вы начинаете приписывать значение идентификатора домена идентификатору, вы начинаете нарушать соглашение, и я настоятельно рекомендую создать другое поле / свойство / переменная-член / столбец / what-have- Вы держите эту информацию. Оставьте идентификатор, чтобы он был ключом.
В описываемом вами сценарии использования нет причины, по которой ваш контроллер не должен определять особый случай, где params[:id] == '0'
, и правильно с ним обращаться, переключаясь на «часть проекта», которую вы идентифицируете не так, как другие. на id
. Поскольку вы, вероятно, хотите, чтобы каждый проект начинался с 0, я думаю, что вы добавите что-то вроде seq
и будете использовать это вместо id
в своих маршрутах, чтобы ваши ключи params имели больше смысла. Сохраняйте текущее наибольшее значение seq
в проекте, чтобы он знал, какой номер назначить при создании новой детали. Удаление и вставка (при условии, что последовательность имеет значение) полностью зависит от вас ...