我跟着this application tutorial。基本上,在这个应用程序中,他们创建了一个待办事项。我已将模型复制到调查应用程序中,我想创建一个包含问题文本和问题类型(二进制文本,文本条目等)的问题。关于我的问题表格格式等,我得到了不同程度的错误,但主要问题似乎是newQuestion
行动
questionForm.bindFromRequest.fold(errors=> ..., question=> ...)
我的代码格式如下:
QuestionController.scala:
def questions = Action {
Ok(views.html.question(Question.all(), questionForm))
}
def newQuestion = Action { implicit request =>
questionForm.bindFromRequest.fold(
errors => BadRequest(views.html.question(Question.all(), errors)),
question => {
Question.create(question)
Redirect(routes.QuestionController.questions)
}
)
}
def deleteQuestion(id: Long) = Action {
Question.delete(id)
Redirect(routes.QuestionController.questions)
}
val questionForm = Form(
"questiontext" -> nonEmptyText
)
CaseClass / companion对象Question.scala:
case class Question (id:Long, questionText:String, questionType:String)
object Question {
val question = {
get[Long]("id") ~
get[String]("questiontext") ~
get[String]("questiontype") map {
case id~questiontext~questiontype => Question(id, questiontext,questiontype)
}
}
def all(): List[Question] = DB.withConnection { implicit c =>
SQL("select * from questions").as(question *)
}
def create(text:String) {
DB.withConnection {
implicit c =>
SQL("insert into questions(questiontext) values ({text})").on(
'text -> text
//'quesType -> qType
).executeUpdate()
}
}
def delete(id:Long) {
DB.withConnection{ implicit c =>
SQL("delete from questions where id = {id}").on(
'id -> id
).executeUpdate()
}
}
}
我基本上想要使用两个参数运行create:
def create(text:String,qType:String) {
DB.withConnection { implicit c =>
SQL("insert into questions(questiontext,questiontype) values ({text},{quesType})").on(
'text -> text,
'quesType -> qType
).executeUpdate()
}
}
但我不确定如何在前面提到的bindFromRequest.fold
处理这个问题。
questionForm
以使用映射并使用(Question.apply)(Question.unapply)
以及元组以及该元组中包含的questiontext -> nonEmptyText
和questionType -> nonEmptyText
而没有运气。 scala.html
文件以相应地包含正确的值类型但仍然没有运气。 questionType
定义为pgsql中的必填字段,并且在没有问题类型的情况下附加后~get questionType from *
上的get失败。< / LI>
更新:
我已对其进行了编辑,以尝试在此处模拟代码: https://www.playframework.com/documentation/2.4.1/ScalaForms
现在,我使用以下代码:
def questions = Action {
Ok(views.html.question(Question.all(), questionForm))
}
def newQuestion = Action { implicit request =>
logger.error(s"wtf")
questionForm.bindFromRequest.fold(
errors => {BadRequest(views.html.question(Question.all(), errors))
},
question => {
Question.create(question:Question)
Redirect(routes.QuestionController.questions).flashing("success"->"Question saved successfully!")
}
)
}
def deleteQuestion(id: Long) = Action {
Question.delete(id)
Redirect(routes.QuestionController.questions)
}
val questionForm:Form[Question]=Form(mapping(
"id" -> longNumber,
"versionid" -> longNumber,
"questiontext" -> nonEmptyText,
"questiontype" -> nonEmptyText)(Question.apply)(Question.unapply)
)
我已更新了我的question.scala.html文件,以@(questions: List[Question], questionForm: Form[(Question)])
作为输入。
当我点击提交时,我不断收到以下消息:wtf
按照我最近链接的示例,我不明白为什么它不会转到question
的情况并继续在数据库中创建问题。我更新了我的数据库创建函数,如下所示:
def create(question:Question) {
DB.withConnection {
implicit c =>
SQL("insert into questions(questiontext,questiontype,versionid) values ({text},{quesType},{versId})").on(
'text -> question.questionText,
'quesType -> question.questionType,
'versId -> 1.toLong
).executeUpdate()
}
}
感谢迄今为止的帮助,我希望我能在短时间内弄明白我的错误。