Здесь много битов, работающих вместе.
Вы определенно хотите использовать attr_accessible на всех моделях. (Google "взломайте массовое назначение рельсов" и прочитайте Руководство по рельсам массового назначения .)
После добавления атрибута attr_accessible в модель все назначения из хэшей (массовые назначения) отключаются, кроме тех, которые вы явно разрешаете. Однако вы все равно можете назначать значения напрямую, по одному за раз.
Внешние ключи кажутся полезными для исключения из массового назначения, поэтому не перечисляйте их в attr_accessible.
Методы .create и .build не используют массовое присвоение, поэтому они могут установить значение one сопоставление внешнего ключа. Если есть несколько ассоциаций, насколько я могу судить, вам придется устанавливать все, кроме первой, отдельно.
Наконец, фактические идентификаторы для внешних ключей создаются базой данных, а не ActiveRecord. Поэтому вам придется либо создавать родительские и дочерние записи одновременно, либо сначала сохранить дочерний, прежде чем вы сможете назначить внешний ключ в родительском. В противном случае для присвоения не будет идентификатора.
Мне не понятно из вашего примера, как работает сотрудник. Но поскольку Сотрудник принадлежит как Пользователю, так и Компании, я думаю, что-то подобное может сработать, предполагая, что @user уже существует:
company = @user.companies.create(..) # fills in company.user_id and saves to DB
employee = @user.employees.build(..) # fills in employee.user_id but does NOT save yet
employee.company = company # fills in employee.company_id
employee.save # now save to DB