Вопрос в том, как мне брать данные из такого рода входов и правильно передавать их в БД (по структуре СОРМ)?
Я пытаюсь передать данные в две таблицы в своей БД, результатом моей работы является то, что, пока значения правильно вставлены в первую таблицу (Автор), вторая (Книга) остается нетронутой. Вероятно, моя проблема в том, что я неправильно называю вложенные, повторяющиеся входы на своей странице, но я не могу найти правильный способ сделать это (я новичок в Scala, поэтому, вероятно, у меня нет опыта в этом).
Ok(Json.toJson(author))
в addData в Application.scala показывает мне
{"name":"what","books":[]}
поэтому я думаю, что проблема в привязке данных из запроса.
Я пытался следовать примерам здесь: Как смоделировать сущность с большим количеством детей в Sorm? и здесь: https://www.playframework.com/documentation/2.1.1/ScalaForms, работая с шаблоном "play-scala" из платформы Play, поэтому у меня есть такой код:
Модели:
case class Author(name: String, books: Seq[Book]) {
}
object Author {
implicit val authorFormat = Json.format[Author]
}
case class Book(title: String ) {
}
object Book {
implicit val bookFormat = Json.format[Book]
}
case class AuthorBook(name: Author, title: Book) {
}
scala.index.html
<table>
<tr>
<td>
On the left Author, on the right Book
<td>
</tr>
<tr>
<td>
<ul id="authors"></ul>
</td>
<td>
<ul id="books"></ul>
</td>
</tr>
</table>
<table>
<form action="@routes.Application.addData()" method ="post">
<tr>
<td>Author: <input name="author" type="text">
</td>
<td>Books: <input name="books.title[0]" type="text"><br><input name="books.title[1]" type="text">
</td>
</tr>
<tr>
<td>
<button>Submit</button>
</td>
</tr>
</form>
</table>
И Application.scala
class Application extends Controller {
def index = Action {
Ok(views.html.index("E-Library"))
}
val authorForm: Form[Author] = Form {
mapping(
"author" -> text,
"books" -> seq(
mapping(
"title" -> text)(Book.apply)(Book.unapply)
)
)(Author.apply)(Author.unapply)
}
def error = Action {
Ok("error")
}
def addData = Action { implicit request =>
authorForm.bindFromRequest.fold(
formWithErrors => {
BadRequest("Bad request!")
},
authorF => {
val author = DB.save(authorF)
Ok(Json.toJson(author))
//Redirect(routes.Application.index())
}
)
}
def getAuthor = Action {
val dataAuthor = DB.query[Author].fetch
Ok(Json.toJson(dataAuthor))
}
def getBook = Action {
val dataBook = DB.query[Book].fetch
Ok(Json.toJson(dataBook))
}
def getData = Action {
Redirect(routes.Application.index())
}
}