2013-09-18 2 views
1

Как добавить дополнительное поле в приложение todo, созданное с помощью платформы Play с помощью Scala? Я использую anorm DB ... Я получаю сообщение об ошибке "not found: value Task" в Application.scala на строке 24. Я пробовал это, пожалуйста, укажите мою ошибку. Заранее спасибо!Как добавить дополнительное поле в todo-приложение

task.scala:

package models 

import anorm._ 
import anorm.SqlParser._ 
import play.api.db._ 
import play.api.Play.current 


case class Task(id: Long, label: String, name: String) 

object Task { 
    val task = { 
    get[Long]("id") ~ 
    get[String]("label") ~ 
    get[String]("name") map { 
     case label~name => Task(id, name) 
     case id~label => Task(id, label) 
    } 
    } 

    def all(): List[Task] = DB.withConnection { implicit c => 
    SQL("select * from task").as(task *) 
    } 
    def create(task: Task): Unit= { 
    DB.withConnection { implicit c => 
     SQL("insert into task (label,name) values ({label},{name})").on(
     'label -> label, 
     'name -> name 
    ).executeUpdate() 
    } 
    } 

    def delete(id: Long) { 
    DB.withConnection { implicit c => 
     SQL("delete from task where id = {id}").on(
     'id -> id 
    ).executeUpdate() 
    } 
    } 
} 

application.scala (класс контроллера):

package controllers 

import play.api._ 
import play.api.mvc._ 
import play.api.data._ 
import play.api.data.Forms._ 

import play.api.data.Form 
import play.api.data.Forms.{tuple,nonEmptyText} 
import play.api.mvc.{Action, Controller} 
import anorm.NotAssigned 

import models.Task 

object Application extends Controller { 
    def index = Action { 
    Redirect(routes.Application.tasks) 
    } 
    val taskForm = Form(
    tuple(
     "label" -> nonEmptyText, 
     "name" -> nonEmptyText 
    ) 
) 

    def tasks = Action { 
    Ok(views.html.index(Task.all(), taskForm)) 
    } 
    def showTask= Action { 
    Ok(views.html.test(Task.all(), taskForm)) 
    } 

    def newTask = Action { implicit request => 
    taskForm.bindFromRequest.fold(
     errors => BadRequest(views.html.index(Task.all(), errors)), 
     { 
     case (label, name) => { 
      Task.create(Task(NotAssigned, label, name)) 
      Redirect(routes.Application.showTask) 
     } 
     } 
    ) 
    } 

    def deleteTask(id: Long) = Action { 
    Task.delete(id) 
    Redirect(routes.Application.showTask) 
    } 
} 

Index (просмотреть файл):

@(tasks: List[Task], taskForm: Form[(String, String)]) 

@import helper._ 

<h2>Add a new task</h2> 

@form(routes.Application.newTask) { 

    @inputText(taskForm("label")) 
    @inputText(taskForm("name")) 

    <input type="submit" value="Create"> 
} 

test.html (вид файла 2):

@(tasks: List[Task], taskForm: Form[(String,String)]) 

@import helper._ 

@main("Todo list") { 
    <h1>@tasks.size task(s)</h1> 

    <ul> 
    @tasks.map { task => 
     <li> 
     <b>@task.label</b> 
     <b>@task.name</b> 

     @form(routes.Application.deleteTask(task.id)) { 
      <input type="submit" value="Delete"> 
     } 
     </li> 
    } 
    </ul> 
} 

ответ

1

Попробуйте использовать:

(применяются) и (исключить его)

методы правильно для элемента формы.

(Task.apply)(Task.unapply) 
0

import models.Task._ импортирует все методы объекта-компаньона models.Task в текущей области, а не Task класс и объект самостоятельно. Таким образом, текущий код позволит вам просто позвонить all и будет ссылаться на Task.all

Изменения импорта в import models.Task вместо этого получить задачу в сферу в вашем объекте Application, и вы будете иметь возможность использовать методы задачи, как вы пытаясь.

+2

если я изменяю импорт, возвращающий следующее несоответствие типа ошибки; found: play.api.data.Form [(String, String)] required: play.api.data.Form [String] –

+1

Это означает, что в вашем списке параметров шаблона index.scala.html вы сказали, что ваш шаблон принимает Form [String], но вы даете ему свой taskForm, который является формой [(String, String)] – johanandren

+1

Учитывая эти проблемы, которые у вас есть, я бы порекомендовал вам сначала прочитать учебник Scala для начинающих, а не пытаться учиться одновременно и Scala, и Play. – johanandren

Смежные вопросы