2010-10-18 2 views
3

Я заметил, что мое приложение автоматически установило все мои процессы на завершение, как только они были созданы. Я просмотрел его, не мог найти, почему дата обновлялась без ведома, но я обнаружил, что один из моих взглядов искал поле, которого не было. Я создал поле «complete», установил его как непустое логическое и повторил попытку.rails Колонка не может быть нулевой:

Я получаю, что он автоматически устанавливается в true, поэтому я попытался установить его как ложно явно в методе create, это все еще не сработало: S, поэтому я попытался поместить скрытое поле в форму. Теперь я получаю ошибку «столбец не может быть нулевой», даже если это значение предоставляется.

Как видите, для полного значения явно есть параметр. Что мне не хватает?

Ошибка:

Mysql::Error: Column 'complete' cannot be null: INSERT INTO `decommissions` (`completed_at`, `keep_backups`, `services_stopped`, `updated_at`, `operating_system_id`, `comments`, `username`, `disposition`, `stakeholder_email`, `complete`, `alias`, `storage`, `model_id`, `contract_maintenance`, `created_at`) VALUES(NULL, 1, 1, '2010-10-18 00:32:37', 1, NULL, NULL, '', '[email protected]', NULL, 'test1', '', 1, '', '2010-10-18 00:32:37') 

Параметры:

{"decommission"=>{"dns_items_attributes"=>{"0"=>{"ip"=>"131.181.185.111", 
"alias"=>"test", 
"retain"=>"1", 
"_destroy"=>""}}, 
"keep_backups"=>"1", 
"services_stopped"=>"1", 
"operating_system_id"=>"1", 
"stakeholder_email"=>"[email protected]", 
"alias"=>"test1", 
"model_id"=>"1"}, 
"commit"=>"Submit", 
"authenticity_token"=>"cMMf0zS/5jPExlXqVPaYVXndqPeVkm+OQ/WEPIYd2+g=", 
"disposition"=>"Dispose", 
"complete"=>"false", 
"storage"=>"Local", 
"contract_maintenance"=>"0"} 

Когда я ставлю следующий в моем создании контроллера он делает 'истинный':

@decommission = Decommission.new(params[:decommission]) 
@decommission.complete = false 
render :text => @decommission.complete 
+0

ли тип столбца для 'complete' в вашей * * миграции из эксплуатации 'boolean'? –

+0

да, я также проверил использование tinyints вместо «false», но это не сработало – Rumpleteaser

+1

Есть ли у вашей модели метод «полный»? – zetetic

ответ

0

@zetetic

я есть метод, который называется полным, я переименовал это, но проблема все еще происходит.

Проблема возникла для всех следующих значений: "расположение" => "Dispose", "полный" => "ложь", "хранения" => "Локальный", "contract_maintenance" =>» 0 "

Эти значения были получены с использованием селекторов нормальных форм, а не рельсовых. Это было единственное, что я мог найти, что у них было общее. Я закончил экспериментальные тесты и обнаружил, что значения не сохраняются с объектом декомпозиции, а скорее сами по себе.

Так в контроллере я пробежал несколько дополнительных строк, чтобы установить значение в пределах объекта равного выводе из эксплуатации параметры, связанную с ним:

@decommission.storage = params[:storage] 
@decommission.contract_maintenance = params[:contract_maintenance] 
@decommission.disposition = params[:disposition] 
@decommission.complete = false 
1

Вы, вероятно, начало осуществление базы данных, что столбец не может содержать значение NULL через что-то в миграции, например:

add_column :decommissions, :complete, :boolean, :null => false

Вы, вероятно, также хотят, значение по умолчанию для столбца быть false, а не NULL

Лично я делаю привычку всякий раз, когда я добавить булево столбец всегда должен быть установлен :default => false (или правда), что помогает избежать логических ошибок, когда вы проверяете истину или ложь в областях и т. д., забывая, что значение иногда может быть нулевым, если вы не настроите его правильно.

Вы можете подтвердить это является проблема из тузда строки:

mysql> show indexes from decommissions; 

должен быть индексом с Non_unique устанавливается в 0 и Column_name в комплекте.

Чтобы исправить это, вы можете добавить миграционную Performing:

change_column_default(:decommissions, :complete, false) 
+0

Взгляните на hash параметра, он имеет 'complete => false', поэтому он не пытается установить столбец в NULL. Так или иначе INSERT создается неправильно (используя NULL вместо «false» или «0»). – zetetic

+0

ah true, что кажется странным. – Jeremy

Смежные вопросы