Rails Migrations - Альтернативное имя для внешнего ключа? - PullRequest
1 голос
/ 01 сентября 2011

В моем приложении 3 таблицы, пользователи, списки, задачи.

Пользователи и списки - это отношение многие ко многим, задачи принадлежат спискам, и пользователи могут выполнять задачи.

Для моей миграции, когда пользователь заполняет список, я хотел бы сохранить в базе данных, кем он был завершен, но я не уверен, как это сделать.

Я мог бы просто добавить t.integer :user_id к переносу моих задач, хотя я бы хотел назвать его .completed_by. Что-то, что ссылается на: user_id в моей таблице User, но называется: complete_by?

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011

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

В будущем сразу станет очевидно, что user_id указывает на пользовательскую таблицу, в то время как новый программист не сможет сказать, что complete_by указывает на пользовательскую таблицу без изучения кода.Если вы хотите иметь конкретное имя или вам нужно более одной ассоциации пользователей, что-то вроде «complete_user_id» остается прозрачным как на уровне приложения, так и на уровне базы данных.

Затем вы можете добавить методы, такие как:

has_one :user

has_one :completed_by, :class_name => "User", :foreign_key => "completed_user_id"

или

has_one :user

def completed_by
    self.user.id
end

и т. Д.

1 голос
/ 01 сентября 2011

В вашей миграции добавьте t.integer :completed_by

Тогда в вашей модели вместо:

has_one :user

сделать:

has_one :user, :class_name => "User", :foreign_key => "completed_by"

или даже настроить имя ассоциации, например:

has_one :completer, :class_name => "User", :foreign_key => "completed_by"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...