【发布时间】:2015-10-04 11:32:31
【问题描述】:
当我在表单字段中输入数据并单击“添加书籍”按钮时,它什么也没有发生...输入的数据没有添加到数据库中,我没有收到错误,我不知道我是什么我做错了...
我有以下控制器
package controllers
import play.api.data.Form
import play.api.data.Forms._
import play.api.mvc.{Action, Controller}
import anorm.NotAssigned
import play.api.Play.current
import play.api.i18n.Messages.Implicits._
import models.Buch
object Book extends Controller{
val addBookForm = Form(
mapping(
"name" -> nonEmptyText,
"author" -> nonEmptyText,
"category" -> nonEmptyText,
"read" -> boolean,
"amount" -> number
)(Buch.apply)(Buch.unapply)
)
def add = Action {
Ok(views.html.book(addBookForm))
}
def addBuch() = Action { implicit request =>
addBookForm.bindFromRequest.fold(
errors => BadRequest,
{
case Buch(name, author, category, read, amount) =>
Buch.addBook(Buch(name, author, category, read, amount))
Ok("Book successfully added!")
}
)
}
}
以下型号
package models
import play.api.db._
import play.api.Play.current
import anorm._
import anorm.SqlParser._
case class Buch(name:String, author:String, category:String, read:Boolean, amount: Int)
object Buch{
val simple = {
get[String]("buch.name") ~
get[String]("buch.auhtor") ~
get[String]("buch.category") ~
get[Boolean]("buch.read") ~
get[Int]("buch.amount") map {
case name~author~category~read~amount => Buch(name, author, category, read, amount)
}
}
def findAll(): Seq[Buch] = {
DB.withConnection { implicit connection =>
SQL("select * from buch").as(Buch.simple *)
}
}
def addBook(buch:Buch): Unit = {
DB.withConnection { implicit connection =>
SQL("insert into buch(name, author, category, read, amount) values ({name}, {author}, {category}, {read}, {amount})").on(
'name -> buch.name,
'author -> buch.author,
'category -> buch.category,
'read -> buch.read,
'amount -> buch.amount
).executeUpdate()
}
}
}
以下sql脚本
# Buch schema
# --- !Ups
CREATE TABLE Buch (
id bigint(20) NOT NULL AUTO_INCREMENT,
name varchar(255) NOT NULL,
author varchar(255) NOT NULL,
category varchar(255) NOT NULL,
read boolean NOT NULL DEFAULT '0',
amount int(11) NOT NULL,
PRIMARY KEY (id)
);
# --- !Downs
DROP TABLE Buch;
以下视图
@(form: Form[Buch])(implicit messages: Messages)
@main("Welcome to Play 2.0") {
@helper.form(action = routes.Book.addBuch) {
@helper.inputText(form("name"))
@helper.inputText(form("author"))
@helper.inputText(form("category"))
@helper.inputText(form("read"))
@helper.inputText(form("amount"))
<input type="submit" value="Add book"/>
}
}
如果我修改模型,例如只使用 3 个参数创建模型,名称、作者和类别,方法 addBook 会将数据插入到我的数据库中。
谁能告诉我我做错了什么?
谢谢!
【问题讨论】:
-
添加调试以检查是否调用了
addBook。如果是,请尝试在您的数据库客户端中执行具有相同值的插入以检查会发生什么。据此,您可以获得更多帮助。 -
看来我的模型(我认为)没有“看到”布尔数据类型......所以这就是它不起作用的原因......我把它改成了 varchar 现在输入来自表单存储在我的数据库中。
-
这些类型,BOOL 和 BOOLEAN 是 TINYINT(1) 的同义词。零值被认为是错误的。
标签: mysql forms scala playframework-2.0