1

我是新手,想知道是否可以验证数组名称的存在不是零。实际上在我的模型上我有

验证:名称,存在:真

这可以防止从 web 表单中发送名称空白是不可能的,但是只要 name[] 是一个 string_array 并且 nil 是一个字符串,当我尝试从 curl 发送 [nil,nil] 时它就会成功。

我发现了这一点:rails validation of presence not failed on nil and this ActiveRecord validation for nil and read the api http://edgeguides.rubyonrails.org/active_record_validations.html但我没有找到线索。

有人可以帮忙吗?

提前致谢。

编辑:使用 validates :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"}
4

2 回答 2

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

编辑:再三考虑,这要求您将名称存储为用逗号分隔的字符串。

于 2013-08-15T11:36:36.670 回答
0

我不确定,但可能经过严格验证?

在导轨中

class Person < ActiveRecord::Base
 validates :name, presence: { strict: true }
end

Person.new.valid?  # => ActiveModel::StrictValidationFailed: Name can't be blank

有关严格验证的更多信息。

于 2013-08-15T11:59:11.450 回答