Это зависит. Если вы ожидаете, что все операторы create будут работать, используйте первый, потому что ошибка create-and-save является исключительной и может быть условием, из-за которого программа не может быть легко восстановлена. Кроме того, если вы используете реляционную целостность (foreign_key_migrations от RedHill Consulting), это приведет к исключениям при нарушениях внешнего ключа, поэтому вы, вероятно, захотите отлавливать их при создании или обновлении.
Второе является работоспособным, и хорошо, если запрос не выполняется, что вы ожидаете как часть повседневной операции этого конкретного действия.
Кроме того, ваш комментарий к коду о том, что сессия небезопасна - сессия - это место для добавления user_id. Пока вы проверяете, что пользователь прошел аутентификацию, прежде чем делать что-либо еще, вы будете в порядке.