Diese Frage ist ziemlich alt, aber da ich ein paar Mal auf dieses Problem gestoßen bin und keine der vorgeschlagenen Lösungen mochte, habe ich selbst etwas gehackt, das es ermöglicht, mehrere Zeichenfolgen für wahr zu verwenden, z. B. "Ja", "Ein". , 't' und das Gegenteil für falsch.
Monkey patchen Sie die Klasse String und fügen Sie eine Methode hinzu, um sie in Boolesche Werte zu konvertieren. Fügen Sie diese Datei /config/initializers
wie hier vorgeschlagen ein: Monkey Patching in Rails 3
class String
def to_bool
return true if ['true', '1', 'yes', 'on', 't'].include? self
return false if ['false', '0', 'no', 'off', 'f'].include? self
return nil
end
end
Beachten Sie, dass wenn der Wert weder für wahr noch für falsch einer der gültigen ist, nil zurückgegeben wird. Es ist nicht dasselbe zu suchen ?paid=false
(alle nicht bezahlten Datensätze zurückgeben) als ?paid=
(Ich gebe nicht an, ob es bezahlt werden muss oder nicht - also verwerfen Sie dies).
Wenn Sie dann diesem Beispiel folgen, sieht die Logik in Ihrem Controller folgendermaßen aus:
Something.where(:paid => params[:paid].to_bool) unless params[:paid].try(:to_bool).nil?
Es ist ziemlich ordentlich und hilft, Controller / Modelle sauber zu halten.
TrueClass
undFalseClass