Ошибка ассоциации с Волшебством Gem в Rails
Я использовал Sorcery для настройки аутентификации в Rails и пытаюсь создать модель, в которой идентификатор пользователя для пользователя связан как ссылка на модель для введенных данных, но я получаю ошибку:
Couldn't find User without an ID
это относится к следующему коду:
def create
@user = User.find(params[:user_id])
@certificate = @user.certificates.create(certificate_params)
redirect_to certificate_path(@certificate)
end
Чтобы ответить на основные вопросы, которые я задавал себе, пользователь вошел в систему...
1 ответ
Это на самом деле очень странная ошибка, если вышеприведенный код действительно ваш. Вы должны были получить что-то вроде Couldn't find Bar with 'id'=
вместо. Вышеуказанная ошибка обычно дается, только если вы не указали аргументы find
на всех, т.е. User.find()
Во всяком случае, основная проблема здесь заключается в том, что params[:user_id]
не содержит значения, которого вы ожидаете, и, вероятно, не содержит значения вообще. Вы не показали достаточно вашего другого кода, чтобы определить, почему это так, НО это не имеет значения...
Если вы не хотите, чтобы люди могли просто изменить URL-адрес и добавить сертификат для какого-либо другого пользователя в вашей системе, вам не следует полагаться на params[:user_id]
для создания связанных объектов, вы должны использовать current_user
- в этом вся суть аутентификации.
Так:
def create
@certificate = current_user.certificates.create(certificate_params)
redirect_to certificate_path(@certificate)
end