як рейки знають, що user_id
це зовнішній ключ user
?
Сам Рейлс не знає, що user_id
це зовнішній ключ user
. У першій команді rails generate model Micropost user_id:integer
він додає лише стовпчик, user_id
проте рейки не знають використання кола. Потрібно вручну поставити лінію в Micropost
моделі
class Micropost < ActiveRecord::Base
belongs_to :user
end
class User < ActiveRecord::Base
has_many :microposts
end
ключові слова belongs_to
та has_many
визначити взаємозв'язок між цими моделями та оголосити user_id
як зовнішній ключ до User
моделі.
Пізніша команда rails generate model Micropost user:references
додає рядок belongs_to :user
у Micropost
модель і цим декларується як зовнішній ключ.
FYI
Оголошення зовнішніх ключів за допомогою колишнього методу дає лише Rails знати про взаємозв'язок моделей / таблиць. База даних про відносини невідома. Тому, коли ви генеруєте діаграми EER, використовуючи програмне забезпечення, подібне до того, що MySql Workbench
ви виявляєте, що між моделями немає міжрядкових зв'язків. Як на наступному малюнку
Однак якщо ви використовуєте більш пізній метод, ви виявите, що файл міграції виглядає так:
def change
create_table :microposts do |t|
t.references :user, index: true
t.timestamps null: false
end
add_foreign_key :microposts, :users
Тепер зовнішній ключ встановлюється на рівні бази даних. і ви можете генерувати правильні EER
діаграми.