Причина довольно проста - когда вы создаете объект с помощью ассоциации, в которой родительский объект еще не сохранен, связанный с ним внешний ключ не может иметь значение, поскольку связанная запись еще не сохранена.Примером:
# Registration announcement is not saved at this point, so it has no ID.
@a1 = @e1.build_registration_announcement(:announcement => "Please bring a favorite baked dish.")
# Registration is built without a registration_announcement_id, as @a1 has no ID to pass on.
@a1.registrations.build(:contact_email => "jdoe@yahoo.com", :adults => 1)
#registration doesn't know about its unsaved registration_announcement parent
# Registration announcement is created and saved. ID exists.
@a2 = @e2.create_registration_announcement(:announcement => "Fall house cleaning!")
# Since the Registration announcement has an ID, registration_announcement_id is set on the built associated registration
@a2.registrations.build(:contact_email => "tara.smith@yahoo.com", :adults => 5)
#registration knows about its saved registration_announcement parent
Это немного неожиданно, поскольку вы можете логически ожидать, что Rails будет поддерживать ассоциацию объекта, а затем назначать внешний ключ ассоциации во время сохранения, но, похоже, это не так.работать так.