কোনও সংখ্যা একটি ব্যাপ্তিতে অন্তর্ভুক্ত করা হয়েছে কিনা তা চেক করবেন (এক বিবৃতিতে)?


86

আমি রুবেলগুলিকে রেলগুলি 3.0.০.৯ ব্যবহার করছি এবং আমি পরীক্ষা করতে চাই যে কোনও সংখ্যা একটি ব্যাপ্তিতে অন্তর্ভুক্ত রয়েছে কিনা। এটি হ'ল, যদি আমার কোনও ভেরিয়েবল থাকে তবে মানটি এই সীমাতে অন্তর্ভুক্ত করা হলে আমি বুলিয়ান মানটি number = 5পরীক্ষা করতে 1 <= number <= 10এবং পুনরুদ্ধার করতে চাই number

আমি এটি এর মতো করতে পারি:

number >= 1 && number <= 10

তবে আমি এটি একটি বিবৃতিতে করতে চাই। আমি এটা কিভাবে করবো?


যেহেতু আপনার উদ্ধৃত বিবৃতিতে কোনও ভুল নেই এটি প্রশ্নটি জাগায়: কেন এটি আরও "সংক্ষিপ্ত" করার প্রয়োজন / প্রয়োজন?
ডার্কডাস্ট

4
@ ডার্কডাস্ট - কম কোড পাশাপাশি সম্ভব!
ব্যাকো

উত্তর:


163

(1..10).include?(number) কৌশলটি।

বিটিডব্লিউ: আপনি যদি কোনও নম্বর ব্যবহার করে বৈধ করতে চান তবে আপনি এটি ActiveModel::Validationsকরতে পারেন:

validates_inclusion_of :number, :in => 1..10

এখানে বৈধতা_সামগ্রী_ সম্পর্কে পড়ুন

বা রেল 3+ উপায়:

validates :number, :inclusion => 1..10

আমি যদি শূন্য করতে অনুমতি চান কি? শূন্য হওয়াতে আমি একটি ত্রুটি পাচ্ছি।
ব্যবহারকারী2503775

4
রেলগুলির একটি বিকল্প রয়েছে allow_nil। ঠিক এটির মতো এটি যুক্ত করুন:, allow_nil: true
মারিও উহার 7'14

65

গণনা # অন্তর্ভুক্ত? :

(1..10).include? n

রেঞ্জ # কভার? :

(1..10).cover? n

এর মধ্যে # তুলনাযোগ্য? :

n.between? 1, 10

সংখ্যার মূল্যায়নকারী :

validates :n, numericality: {only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 10}

অন্তর্ভুক্তি যাচাইকারী :

validates :n, inclusion: 1..10

4
আমি এই পদ্ধতিটি আরও ভাল পছন্দ করি কারণ বৈধতা পাঠ্যটি আরও অর্থবোধ করে।
ড্যান

আমি এটি আরও ভাল পছন্দ করি কারণ আমি ইতিমধ্যে বৈধতা সংখ্যা ছিল ality এটিকে এক-লাইন করে তোলে :)
ব্র্যাডগ্রিনস

@ ব্র্যাডগ্রেনগুলি এটি একটি দীর্ঘ লাইন।
wchargin

4
আমি লক্ষ করতে চাই যে আপনার যদি কিছু নির্দিষ্ট যুক্তি প্রয়োজন হয় বা সমিতিগুলিতে অ্যাক্সেসের প্রয়োজন হয় তবে আপনি প্রক ব্যবহার করতে পারেন। উদাহরণস্বরূপvalidates :amount, numericality: { less_than_or_equal_to: ->(m) { m.user.balance }, greater_than_or_equal_to: 0 }
Евгений

16

যদি এটি কোনও বৈধকরণ প্রক্রিয়ার অংশ না হয় তবে আপনি ব্যবহার করতে পারেন #between?:

2.between?(1, 4)
=> true

7

কোনও ফর্ম জমা দেওয়ার সঠিক ত্রুটির বার্তাগুলির জন্য এগুলি চেষ্টা করুন

validates_numericality_of :tax_rate, greater_than_or_equal_to: 0, less_than_or_equal_to: 100, message: 'must be between 0 & 100'

3

রেল 4

যদি আপনি এটি অ্যাক্টিভমডেলের মাধ্যমে চান: যাচাইকরণ আপনি ব্যবহার করতে পারেন

validates_inclusion_of :number, :in => start_number..end_number

বা রেল 3 সিনট্যাক্স

validates :number, :inclusion => start_number..end_number

তবে আমার সাদামাটা উপায় find

number.between? start_number, end_number


সম্ভবত কিছু ব্যাখ্যা অন্তর্ভুক্ত করুন।
জিএমক্রিস

2

রুবি ১.৯-এ সর্বাধিক সরাসরি অনুবাদটি রেঞ্জ # কভার বলে মনে হচ্ছে ? :

আপত্তিটি ভিক্ষা এবং শেষের মধ্যে থাকলে সত্যটি প্রত্যাবর্তন করে, অর্থাত্ ভিক্ষা <= আপত্তি <= শেষ (বা এক্সক্লুসিভ শেষে যখন বাদ দেওয়া হয়? সত্য হয়)।

আপনি যদি বিস্মিত হন যে Range#include?এটির থেকে কীভাবে আলাদা হয় , তবে এটি যদি পরে থাকে যে এটি কোনও সংখ্যাসূচক পরিসীমা হয় তবে এটি পরে বিস্তৃত সমস্ত উপাদানগুলির উপরে পুনরাবৃত্তি করে। আরও বিস্তারিত ব্যাখ্যা জন্য এই ব্লগ পোস্ট দেখুন ।


1

আপনি যদি কাস্টম অ্যারেতে নির্দিষ্ট নম্বর বিদ্যমান তা পরীক্ষা করতে চান,

উদাহরণস্বরূপ আমি জানতে চাই যে 5 টি তালিকায় অন্তর্ভুক্ত রয়েছে = [[1,4,6,10]]

list.include? 5 => false
list.include? 6 => true
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.