1

私は初心者で、nil ではない配列名の存在を検証できるかどうか疑問に思っています。実際に私が持っている私のモデルでは

検証:名前、存在: true

これにより、Web フォームから名前を空白で送信することができなくなりますが、name[] が string_array で nil が文字列であるとすぐに、curl から [nil,nil] を送信しようとすると成功します。

私はこれを見つけました: nilで失敗しないプレゼンスの検証とnilのこのActiveRecord検証をレールし、API http://edgeguides.rubyonrails.org/active_record_validations.htmlを読みましたが、手がかりが見つかりませんでした。

誰でも助けることができますか?

前もって感謝します。

編集: with 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 に答える