Я не думаю, что has_secure_password будет делать то, что вы хотите, как вы обнаружили.
Таким образом, вместо использования has_secure_password, вы можете написать свой собственный, в основном скопировать исходный код и «разветвлять» его, чтобы делать то, что вы хотите - генерировать и проверять пароль, только если #user не равен nil, это то, что звучит как вы хочу.
Или, как предлагает jtomasri, вы можете создать модель Employee и модель User - вы можете использовать функцию ActiveRecord «наследование одной таблицы», чтобы они оба оставались в одной таблице и имели общий суперкласс вы все равно можете получить (например, Account.find, чтобы вернуть сотрудников и пользователей, соответствующих вашим критериям). В некотором смысле это «более чистое» решение, хотя оно увеличивает сложность скрытых вещей ActiveRecord - в прошлом наследование одной таблицы было немного ошибочным, я думаю они ведут себя хорошо в наши дни , (Сам не использовал это в течение некоторого времени).