присоединиться к таблице, создавая непреднамеренные записи NULL в рельсах - PullRequest
0 голосов
/ 25 января 2011

Я получил следующие модели.Таблица соединений ссылается на user_id и course_id, и комбинация устанавливается уникальной.Однако после тестирования моей страницы на сервере, например, многократного ухода и присоединения к курсам, а также с другим current_user, моя таблица присоединения создала записи, в которых course_id был пустЭто привело меня к ошибкам при получении данных впоследствии.Итак, теперь я попытался добавить :false => null.Может ли это помочь?спасибо за ваше время

def self.up
  create_table :course_enrollments do |t|
  t.references :user, :null => false
  t.references :course, :null => false
  t.timestamps
end
  add_index :course_enrollments, [:user_id, :course_id], :unique => true
end

1 Ответ

1 голос
/ 25 января 2011

Добавление :null => false вызовет исключение при попытке сохранить CourseEnrollment с нулевым идентификатором. Это нормально, если вы напишите действие контроллера для обработки исключения. Вы можете (и должны) добавить validates_presence_of :user_id, :course_id в модель CourseEnrollment, чтобы экземпляры с нулевыми идентификаторами были недействительными и могли обрабатываться обычным методом <model>.save.

Однако главный вопрос заключается в том, почему ваше приложение в первую очередь сохраняет строки с нулевыми идентификаторами? Например, вы можете создавать осиротевшие строки (удаляя связанный курс или пользователя). Как правило, для предотвращения этого рекомендуется добавить :dependent => :destroy в has_many ассоциаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...