रेलें: मैं कैसे मान्य करूँ कि कुछ बूलियन है?


115

क्या रेल के पास validates_numericality_ofबूलियन की तरह एक सत्यापनकर्ता है या मुझे अपना रोल करने की आवश्यकता है?

जवाबों:


244

रेल 3 से, आप कर सकते हैं:

validates :field, inclusion: { in: [ true, false ] }

2
तो, यह मान्यता सही है, लेकिन त्रुटि संदेश अंतिम उपयोगकर्ता के लिए मददगार नहीं है: "myfield सूची में शामिल नहीं है"
पीटर संकौस

2
अच्छी बात। आप त्रुटि संदेश को अनुकूलित कर सकते हैं: guide.rubyonrails.org/…
ड्रू दारा-अब्राम्स

55
छोटा रूपvalidates :field, inclusion: [true, false]
बमुश्किल ज्ञात

8
ध्यान दें कि आपके पास validates :field, presence: trueबूलियन फ़ील्ड के लिए उपस्थिति ( ) के लिए सामान्य सत्यापन नहीं हो सकता है (फ़ील्ड falseमान के लिए मान्य नहीं होगा )। लेकिन दोनों रेल 3 और 4 में, validates :field, inclusion: [true, false]क्षेत्र की उपस्थिति के लिए परीक्षण करने के लिए साइड-इफेक्ट के साथ मूल्यों की एक सूची में शामिल करने के लिए परीक्षण करना होगा, (जब तक कि उन मूल्यों में nilसे एक पाठ्यक्रम का नहीं है)।
मार्टिन कैरेल

1
और उन लोगों के लिए जिन्हें इसे एक त्रुटि-संदेश की आवश्यकता है:validates :field, inclusion: { in: [ true, false ], message: "Please, select one!" }
tagaism

38

मुझे विश्वास है कि बूलियन क्षेत्र के लिए आपको कुछ करने की आवश्यकता होगी:

validates_inclusion_of :field_name, :in => [true, false]

एपीआई के एक पुराने संस्करण से : "यह जिस तरह से वस्तु # रिक्त है उसके कारण है?

मुझे यकीन नहीं है कि अगर यह अभी भी रेल 3 के लिए ठीक रहेगा, तो उम्मीद है कि मदद मिलेगी!


lol @ रेल 3. मैं शर्त लगा सकता हूं कि यह आने वाले महीनों के लिए चेतावनी होगी। ठीक है, मुझे लगा कि यह पलायन हो गया है और आप सहमत हैं। धन्यवाद!
अरोना

यह रेल 4 के लिए सच है! वाह, झूठी.ब्लैंक? # => सच सिर्फ गलत जवाब की तरह लगता है , कुछ ऐसा जिसकी मुझे रेल से उम्मीद नहीं थी।
डैन बैरन

1
यह काम नहीं करता है, किसी भी स्ट्रिंग जैसे, "फू" को रूपांतरित किया जाएगा true
का मोक

10

जब मैं इसे लागू करता हूं, मुझे मिलता है:

कंधे से कंधा मिलाकर चेतावनी:

आप validate_inclusion_ofयह दावा करने के लिए उपयोग कर रहे हैं कि एक बुलियन कॉलम बूलियन मानों को अनुमति देता है और गैर-बूलियन को नापसंद करता है। ध्यान रखें कि यह पूरी तरह से परीक्षण करना संभव नहीं है, क्योंकि बूलियन कॉलम स्वचालित रूप से गैर-बूलियन मान को बूलियन वाले में बदल देगा। इसलिए, आपको इस परीक्षण को हटाने पर विचार करना चाहिए।


उन क्षेत्रों के लिए जहां शून्य की अनुमति है, क्या यह अभी भी नील को बूलियन में परिवर्तित करता है?
mwfearnley

केवल उस परीक्षण को हटा दें, अगर स्तंभ अशक्त है, तो आपको यह करना चाहिए: यह {चाहिए allow_value (nil) .for (: फ़ील्ड)} संदर्भ
Ardi Nusawan

4

आप छोटे संस्करण का उपयोग कर सकते हैं:

validates :field, inclusion: [true, false]

अतिरिक्त विचार। जब मैं दुश्मनों से निपटता हूं, तो मुझे एक निरंतर का उपयोग करना पसंद है:

KINDS = %w(opening appointment).freeze

enum kind: KINDS

validates :kind, inclusion: KINDS

2

रेल्स डॉक्स 5.2.3 के अनुसार उत्तर

यह सहायक (उपस्थिति) मान्य करता है कि निर्दिष्ट विशेषताएँ खाली नहीं हैं। यह रिक्त का उपयोग करता है? जाँचने का तरीका कि मान या तो शून्य है या रिक्त स्ट्रिंग है, यानी एक स्ट्रिंग जो या तो खाली है या जिसमें व्हाट्सएप है।

झूठे.ब्लैंक के बाद से? यह सच है, यदि आप बूलियन फ़ील्ड की उपस्थिति को मान्य करना चाहते हैं, तो आपको निम्न मान्यताओं में से एक का उपयोग करना चाहिए:

validates :boolean_field_name, inclusion: { in: [true, false] }

अद्यतन दस्तावेजों को छोड़कर यह पिछले एक के रूप में एक ही उत्तर इस तथ्य को दर्शाता है कि हैश रॉकेट अब आवश्यक नहीं हैं। +1।
औरोना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.