我创建了一个简单的 Project 模型,它有四个属性:
Project name:string description:text complete:boolean user_id:integer
然后为模型添加了一些验证:
class Project < ActiveRecord::Base
validates_presence_of :name, :description, :complete
end
现在,当我尝试在irb中保存 Project 时,我不被允许:
>> r = Project.new(:name => 'Name', :description => 'Description', :complete => false)
=> #<Project id: nil, name: "Name", description: "Description", created_at: nil, updated_at: nil, complete: false, user_id: nil>
>> r.save
=> false
好像我已经满足了所有验证要求,是吗?如果我将完整属性更改为 true ,那么我可以保存该对象:
>> r.complete = true
=> true
>> r.save
=> true
我看不出这里发生了什么。 完整属性在Rails项目中是否具有特殊含义?
答案 0 :(得分:1)
它更多地与validates_presence_of和布尔值有关,如果任何命名属性对空白返回true,它会阻止保存调用?方法。
"".blank? => true
[].blank? => true
false.blank? => true
nil.blank? => true
您必须使用其他验证来检查完整性,例如:
class Project < ActiveRecord::Base
validates_presence_of :name, :description
validates_inclusion_of :complete, :in => [true, false]
end