94 Stimmen

Wie kann man prüfen, ob eine Zahl in einem Bereich enthalten ist (in einer Anweisung)?

Ich verwende Ruby on Rails 3.0.9 und ich möchte überprüfen, ob eine Zahl in einem Bereich enthalten ist. Das heißt, wenn ich eine Variable habe number = 5 Ich möchte Folgendes überprüfen 1 <= number <= 10 und rufen einen booleschen Wert ab, wenn die number Wert in diesem Bereich enthalten ist.

Ich kann das so machen:

number >= 1 && number <= 10

aber ich möchte das in einer einzigen Erklärung tun. Wie kann ich das tun?

0 Stimmen

Da an der von Ihnen zitierten Aussage nichts auszusetzen ist, stellt sich die Frage: Warum wollen/müssen Sie sie weiter "kürzen"?

1 Stimmen

@DarkDust - So gut wie möglich weniger Code!

178voto

Mario Uher Punkte 11989

(1..10).include?(number) ist der Trick.

Übrigens: Wenn Sie eine Zahl validieren wollen, indem Sie ActiveModel::Validations können Sie selbst tun:

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

lesen aquí über validiert_die_Einbeziehung_von

oder der Rails 3+ Weg:

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

0 Stimmen

Was ist, wenn ich auch die Zahl Null zulassen möchte? Ich bekomme einen Fehler, wenn es Null ist.

6 Stimmen

Rails hat eine Option allow_nil . Fügen Sie es einfach so hinzu: , allow_nil: true

77voto

tybro0103 Punkte 45795

Enumerable#include? :

(1..10).include? n

Bereich#abdecken? :

(1..10).cover? n

Vergleichbar#zwischen? :

n.between? 1, 10

Numerik-Validator :

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

Einschluss-Validator :

validates :n, inclusion: 1..10

1 Stimmen

Mir gefällt diese Methode besser, weil der Validierungstext mehr Sinn ergibt.

0 Stimmen

Mir gefällt es besser, weil ich bereits die Numerizität validiert habe. Macht es eine Ein-Zeilen :)

0 Stimmen

@BradGreens das ist eine lange Schlange.

16voto

Holin Punkte 1171

Wenn es nicht Teil eines Validierungsprozesses ist, können Sie #between? :

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

9voto

Jon Punkte 545

Um genaue Fehlermeldungen bei der Übermittlung eines Formulars zu erhalten, versuchen Sie Folgendes

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

4voto

Schienen 4

wenn Sie es durch ActiveModel::Validations wollen, können Sie verwenden

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

oder die Rails 3-Syntax

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

Der einfachste Weg ist meiner Meinung nach

number.between? start_number, end_number

0 Stimmen

Vielleicht sollten Sie eine Erklärung hinzufügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X