ОК, я понял это сам. Модель членства проверяет наличие: project_id. Я устанавливаю членство.проект, прежде чем сохранить проект внутри транзакции. После этого я пытаюсь сохранить членство, но так как проект был задан до того, как он был создан в базе данных, то: project_id равно nil.
Чтобы исправить этот код, мне пришлось изменить его следующим образом:
membership = Membership.new
Project.transaction do
begin
@project.save!
membership.project = @project
membership.save!
rescue
flash[:notice] = "There was an error creating your project."
end
end
Обратите внимание, что присвоение @project
теперь после , проект был сохранен (и автоматически создан идентификатор).