Rails-Bereich mit Boolean

7

Wenn Sie in Rails mit Active Record einen booleschen Wert verwenden und Sie (sagen wir) visible? fragen, wird in der Spalte überprüft, ob true ist oder nicht. Wenn es false oder nil ist, gibt visible? false zurück.

Wie skaliert man einen booleschen Wert, um zu fragen, ob die Methode ? false zurückgeben würde? Ich habe das:

%Vor%

Aber ich frage mich, ob es einen saubereren Weg gibt. Gibt es eine Möglichkeit, diesen Bereich zu schreiben, ohne explizit sowohl nil als auch false anzugeben? Wenn wir nach dem Gegenteil streben, könnten wir einfach

schreiben %Vor%

das scheint sauberer zu sein. Was ist der beste Code für den sichtbaren Bereich?

    
Peter 03.07.2012, 06:31
quelle

4 Antworten

4

Verwenden Sie einen Standardwert für die Spalte. Dies ist aus zwei Gründen sinnvoll: Sie haben nur zwei mögliche Werte in Ihrer Datenbank, was Ihren Code vereinfacht. Und Booleans sind entweder wahr oder falsch, nicht nil, nicht vielleicht, nicht foobar. Richtig und falsch. "Ich würde es eher vermeiden, die DB streng falsch / wahr zu bekommen", ist ein falsches Argument für eine boolesche Spalte.

Wenn Sie mehr als 2 Zustände benötigen, verwenden Sie eine Zustandsmaschine oder etwas ähnliches - dann ist es keine boolesche Spalte / kein boolescher Zustand mehr.

    
Tanel Suurhans 03.07.2012, 07:33
quelle
12

Ich würde mit gehen:

%Vor%

In%% stellt co_de% einen fehlenden oder unbekannten Wert dar, daher sind Datensätze mit NULL weder sichtbar noch unsichtbar.

    
Stefan 03.07.2012 08:08
quelle
3

Fast so wie Stefans Antwort, ein bisschen vereinfacht:

%Vor%

Es funktioniert für PostgreSQL, aber ich bin nicht sicher, ob es für andere Datenbanken funktioniert.

    
denis.peplin 03.12.2012 05:50
quelle
0

Ab Rails 4 können Sie dies wie folgt erreichen:

%Vor%

Obwohl Tanels Antwort nicht wirklich die Frage beantwortet, welche "Was ist der beste Code für den sichtbaren Bereich?" würde ich definitiv wiederholen, was er sagte, dass eine boolesche Spalte immer sollte sei entweder true oder false .

Tatsächlich darf keine Datenbank eine Spalte, die als boolean deklariert ist, als etwas anderes als true oder false zulassen, weil es sonst nicht wirklich boolean ist. Aber das ist eine separate Dose Würmer. :-D

    
jeffdill2 08.02.2018 19:22
quelle

Tags und Links