Im Moment finde ich ActiveRecord Abfrage zu flexibel sein. Nämlich:Beschränken ActiveRecord ID-Abfrage, um nur echte Ganzzahlen zu verwenden
MaintenanceOrder.where(id:" 1 ")
=> [#<MaintenanceOrder id: 1...]
MaintenanceOrder.where(id:"1.2")
=> [#<MaintenanceOrder id: 1...]
MaintenanceOrder.where(id:"1/2")
=> [#<MaintenanceOrder id: 1...]
MaintenanceOrder.where(id:"x")
=> []
MaintenanceOrder.where(id:"? ")
=> []
Ich möchte einen Eintrag gefunden, um nur b wenn das, was an den id
übergeben wird ist eine Kette von nichts aus anderen als ganze Zahlen und Leerzeichen (mit irgendwelchen führenden 0s entfernt). Natürlich könnte ich Regex verwenden, um dies vor der Abfrage herauszufinden, aber ich frage mich, ob es einige Wege gibt, dies automatisch zu tun. Auf diese Weise werde ich im Stande sein, etwas zu tun:
object = MaintenanceOrder.where(id: some_id)
if object.exists?
...
Statt so etwas wie diese
if some_id is invalid
...
else MaintenanceOrder.where(id:some_id)
Versucht es mit ID '1' Fehler: 'ActiveRecord :: StatementInvalid: SQLite3 :: SQLException: in der Nähe von" id ": Syntaxfehler: SELECT "orders". * FROM "orders" WO (BINARY id = '1') ' – james
@james: Nun, Sie erwarten nicht, SQLite bei der Produktion zu verwenden, oder? Ich habe es auf MySql versucht. –
@james: Für Sqlite können Sie diese 'User.where ('id like?'," 22878 ")' 'versuchen. Es funktioniert für MySql, und es sollte für Sqlite funktionieren. –