2015-06-11 12 views
8

Ich habe diesen Code zu bekommen, die mich aus der Datenbank abrufen und Objekt ermöglicht und das Rück ein JSON Objekt Slick 3.0 mit:Slick 3.0: Idiomatic Art und Weise ergibt sich aus der Datenbank für eine <code>API</code> innerhalb von Option (Scala Play-Framework)

Das Problem ist, dass wenn ich ein Objekt abfragen, das nicht in der Datenbank ist, bekomme ich eine Ausnahme. Was ich möchte, ist tun, um einen Option innerhalb der Future zu erhalten, die von den Model, um in der Lage sein zu schreiben, so etwas wie dies zurückgegeben wird:

// Controller 

class ThingController extends Controller { 
    def get(id: Int) = Action.async { 
    Things.findById(id).map { 
     case None => NotFound(Json.obj("error" -> "Not Found"))) 
     case Some(thing) => Ok(Json.obj("result" -> thing))) 
    } 
    } 
} 

Ist es sinnvoll?

Antwort

10

Rufen Sie einfach headOption auf Ihr Ergebnis statt head:

def findById(id: Int): Future[Option[Thing]] = db.run(filterQuery(id).result.headOption)

+0

Es könnte nicht einfacher sein. Vielen Dank! – Daniel

+0

Das beunruhigte mich schon eine Weile. Vielen Dank. –

Verwandte Themen