Сопоставление OneToMany в среде Scala Play без вставки данных во вторую таблицу

Вопрос в том, как мне брать данные из такого рода входов и правильно передавать их в БД (по структуре СОРМ)?

Я пытаюсь передать данные в две таблицы в своей БД, результатом моей работы является то, что, пока значения правильно вставлены в первую таблицу (Автор), вторая (Книга) остается нетронутой. Вероятно, моя проблема в том, что я неправильно называю вложенные, повторяющиеся входы на своей странице, но я не могу найти правильный способ сделать это (я новичок в 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())
  }
}

person Maelren    schedule 11.09.2015    source источник


Ответы (1)


Нашел! Как упоминалось здесь: Вложенная форма в игре! Скала 2.2

Мне нужно было переименовать входные имена в моей форме с book.title[0] на book[0].title.

person Maelren    schedule 11.09.2015