我是新手,并且想知道是否可以验证数组名称的存在是否为零。实际上在我的模型上我有
验证:name,presence:true
这可以防止从Web表单中将名称空白发送,但是尽管name []是string_array并且nil是一个字符串,当我尝试从curl发送[nil,nil]时它成功。
我找到了这个:rails validation of presence not failing on nil和ActiveRecord validation for nil并阅读了api http://edgeguides.rubyonrails.org/active_record_validations.html,但我没有找到线索。
有人可以提供帮助吗?
提前致谢。
编辑:带有验证:name,presence:true,allow_nil:false不起作用。如果我发送并且名称无效则成功。例如:
curl -X POST -d 'patient[name[]]=["Mathew","de Dios]"&patient[email]=mat@gmail.com&patient[password]=123456&patient[password_confirmation]=123456&patient[sex]="female"&patient[doctor]=9' http://localhost:3000/api/patients.json
{**"success":true**,"data":{"active":null,"age":null,"created_at":"2013-08-15T11:19:03Z","dao":null,"day_active":null,"doctor_id":9,"email":"mat@gmail.com","geo_ini":null,"id":2124,"migraine_triggers":null,**"name":[null]**,"password_digest":"$2a$10$say8LiNmnazWL/EWKBKtL.fa5pJLKe4mo8Sn.HD6w2jeUrc5vmTe2","phone":null,"remember_token":"iX4Ohuj_Z6c2mDQZ_5e2vw","rich":null,"sex":"\"female\"","updated_at":"2013-08-15T11:19:03Z"},"status":"created"}
答案 0 :(得分:1)
如果name是一个数组,并且您要检查nil元素,则可以编写自定义验证方法。这是一个例子:
validate :check_name_array_for_nil
def check_name_array_for_nil
self.name.split(",").each do |x|
if x.nil?
errors.add(:name, "nil in name array")
end
end
end
编辑: 再想一想,这要求您将名称存储为以逗号分隔的字符串。
答案 1 :(得分:0)
我不确定但是可能会进行严格的验证?
class Person < ActiveRecord::Base
validates :name, presence: { strict: true }
end
Person.new.valid? # => ActiveModel::StrictValidationFailed: Name can't be blank