Как пометить: id в приложениях Ruby on Rails? - PullRequest
1 голос
/ 08 июня 2009

Я создаю свое первое приложение для рельсов, и я ожидаю, что со временем у него будет много моделей / контроллеров. И, конечно, у каждого из них есть удостоверение личности, связанное с ними. Я вижу, что они уже начинают путаться.

В контроллере пользователя это поле называется id, но в любом другом контроллере я помечаю его как user_id. Когда контроллер манипулирует несколькими моделями или вызывает действия в других контроллерах, кажется утомительным сохранять все идентификаторы прямыми.

Я хотел бы просто поставить их все в явном виде, но боюсь, что это может привести к ошибкам в будущем, поскольку у пользователя фактически нет поля user_id. Это может быть проблемой при использовании чего-то вроде update_attributes!.

Кто-нибудь еще испытывал эту проблему? Это действительно проблема, или я превращаю это в большую проблему, чем на самом деле? Существуют ли стандартные рекомендации по именованию поля id?

Спасибо! Dave

Ответы [ 2 ]

7 голосов
/ 08 июня 2009

Это действительно не проблема. В Rails принято обозначать первичный ключ таблицы как id, а любые внешние ключи, которые обращаются к этой таблице, как table_name_id.

Я бы не советовал менять это поведение по умолчанию, так как Rails больше относится к соглашению о конфигурации, и этот метод именования действительно делает вашу схему БД намного проще для понимания по мере роста сложности.

Если вы решите изменить имя первичного ключа, существует также вероятность того, что у вас возникнут дополнительные проблемы при использовании гемов и плагинов других народов.

1 голос
/ 08 июня 2009

Насколько я знаю, лучшим именем для поля id является id.

У меня есть приложение с около 30 моделями и почти одинаковым количеством контроллеров. Я манипулирую многими моделями в одном контроллере, и у меня никогда не было проблем с идентификатором. Может быть, мы могли бы помочь вам немного больше, если вы вставите некоторый код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...