CRUD-операции с использованием Scalatra и Casbah - PullRequest
2 голосов
/ 16 февраля 2012

Я изучаю Scala и MongoDB и использую Scalatra и Casbah в качестве основы для простого веб-приложения.

Это простая доска объявлений, предназначенная для изучения операций CRUD в Касбе.Проблемы заключаются в том, что когда я перечисляю сообщения, у меня нет возможности однозначно ссылаться на запись в MongoDB на сайте.

Мой текущий код указан ниже.

У меня проблема в том, что ObjectID не может быть преобразован в строку.Но без уникального идентификатора для каждой строки я не могу предоставить функцию удаления с веб-страницы.

Существует ли стандартный способ обработки этих вещей с помощью Casbah?Все учебники, которые я видел, игнорировали уникальный доступ к записям с веб-страницы или полностью игнорировали скалатру и фокусировались только на обработке записей из кода scala.

indexController.scala

get("/msgs") 
{
    contentType = "text/html";
    var list = new ListBuffer[Message]()

    for (i <- coll.find())
    {
        var message = new Message();
        message.author = i.getOrElse("author", "???").toString();
        message.message = i.getOrElse("msg", "???").toString();
        message.id = i.getOrElse("_id", "???").asInstanceOf[String];

        list += message;
    }

    layoutTemplate("/Views/index.scaml",("list" -> list.toList));
}

index.scaml

%body
    %h2
    Messages
    %br
        %ul
            -@ val list: List[domain.Message]
            - for (l:domain.Message <- list)
                %li
                    From: #{l.author}
                    \- #{l.message}
                    %form{:method => "DELETE", :action => "msg/#{l.id}"}
                        %input{:type => "submit", :value => "Delete"}

1 Ответ

3 голосов
/ 16 февраля 2012

Вы не можете разыграть, но можете сделать это как String easilly после:

i.getAs[ObjectId]("_id") map (_.toString) getOrElse "???"

И в шаблоне вы можете сделать это

#{l.id.toString}
...