2016-06-16 3 views
1

Я пытаюсь вставить продукт моей БД, но на самом деле я не вставлять ничегоSlick не вставляя но никакой ошибки

Моя модель выглядит следующим образом:

case class Product(id: Option[Int], name: String, description: String, style: String, price: Int, cat_id: Int, size_id: Int, brand_id: Int) 

Определение таблицы:

class ProductsTable(tag: Tag) extends Table[Product](tag, "PRODUCTS") { 
    def id = column[Int]("PRODUCT_ID", O.PrimaryKey, O.AutoInc) 
    def title = column[String]("NAME") 
    def description = column[String]("DESCRIPTION") 
    def style = column[String]("STYLE") 
    def price = column[Int]("PRICE") 
    def category_id = column[Int]("CATEGORY_ID") 
    def size_id = column[Int]("SIZE_ID") 
    def brand_id = column[Int]("BRAND_ID") 
    def category = foreignKey("CAT_FK", category_id, cat.Categories)(_.cat_id, onUpdate=ForeignKeyAction.NoAction, onDelete=ForeignKeyAction.Cascade) 
    def size = foreignKey("SIZE_FK", size_id, sizes.Sizes)(_.size_id, onUpdate=ForeignKeyAction.NoAction, onDelete=ForeignKeyAction.Cascade) 
    def brand = foreignKey("BRAND_FK", brand_id, brands.Brands)(_.brand_id, onUpdate=ForeignKeyAction.NoAction, onDelete=ForeignKeyAction.Cascade) 
    def * = (id.?, title, description, style, price, category_id, size_id, brand_id) <>(Product.tupled, Product.unapply _) 
} 

Способ вставки в DAO:

def insert(product: Product): Future[Unit] = db.run(Products += product).map { _ =>() } 

и Контроллер:

def newproduct = Action { implicit request => 
    val product: models.Product = productForm.bindFromRequest().get 
    productDAO.insert(product) 
    Redirect(routes.ProductController.listproducts()) 
} 

ответ

1

Что вы будете делать с будущим, которое вы получите от продуктаDAO? Поскольку это асинхронный вызов, ничего не произойдет в потоке, с которого вы начинаете. Вы должны сделать какое-то действие с будущим, чтобы узнать, что с ним произошло. Если веб-библиотека асинхронной вы должны быть в состоянии закончить так:

def newproduct = Action { implicit request => 
    val product: models.Product = productForm.bindFromRequest().get 
    productDAO.insert(product).andThen { 
    case Success(_) => 
     Redirect(routes.ProductController.listproducts()) 
    case Failure(e) => 
     log.error(e) // some logging 
     Failure(500) // some failure 
    } 
} 

Если веб-библиотеки не ASync вам, возможно, придется ждать ответа:

def newproduct = Action { implicit request => 
    val product: models.Product = productForm.bindFromRequest().get 
    import scala.concurrent.duration._ 
    Try(Await.result(productDAO.insert(product), 10 seconds)) match { 
    case Success(_) => 
     Redirect(routes.ProductController.listproducts()) 
    case Failure(e) => 
     log.error(e) // some logging 
     Failure(500) // some failure 
    } 
}