2016-09-26 2 views
1

Я пытаюсь создать запись, если она не существует.Ошибка проверки правильности при создании в контроллере.

@construction = Construction.create!(:bom_created => false, 
            :recipe_created => false, 
            :cost_rollup_complete => false, 
            :opportunity_id => $current_opportunity) 

bom_created, recipe_created и cost_rollup_complete являются обязательными для заполнения в моей модели.

validates_presence_of :bom_created 
validates_presence_of :recipe_created 
validates_presence_of :cost_rollup_complete 

Я думал, что ОК с передачей значений как часть создания, но я получаю

ActiveRecord::RecordInvalid in ConstructionsController#show 
Validation failed: Bom created can't be blank, Recipe created can't be blank, Cost rollup complete can't be blank 

Rails.root: C:/Users/cmendla/RubymineProjects/product_development 

Application Trace | Framework Trace | Full Trace 
app/controllers/constructions_controller.rb:76:in `show' 
Request 

Parameters: 

{"id"=>"1"} 
+0

являются ваши поля булева? если это так, то это дубликат http://stackoverflow.com/a/10506648/1536309 –

ответ

3

validates_presence_of возвратит недопустим для false. (false.present? => false)

Вы должны использовать вместо

validates_inclusion_of :bom_created, in: [true, false] 
validates_inclusion_of :recipe_created, in: [true, false] 
validates_inclusion_of :cost_rollup_complete, in: [true, false] 
+1

В рельсах 'present?' определяется как '! blank?' его одно и то же. Источник: http://api.rubyonrails.org/classes/Object.html#method-i-present-3F – BananaNeil

3

Если вы хотите, чтобы проверить наличие логического поля (где реальные значения являются истинными и ложными), вы будете хотеть использовать validates_inclusion_of : field_name, in: [true, false].

изменить ваши заверениях

validates_inclusion_of :bom_created,   in: [true, false] 
validates_inclusion_of :recipe_created,  in: [true, false] 
validates_inclusion_of :cost_rollup_complete, in: [true, false] 

source

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