откуда rails узнает, что user_id
является внешним ключом, ссылающимся на user
?
Сам Rails не знает, что user_id
является внешним ключом, ссылающимся на user
.В первой команде rails generate model Micropost user_id:integer
он добавляет только столбец user_id
, однако rails не знает, как использовать col.Вам необходимо вручную вставить строку в 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
диаграммы.