CRUD Operations с использованием Scalatra и Casbah
Вопрос
Я изучаю Scala и MongoDB, и я использую Scalatra и Casbah в качестве основы для простого веб -приложения.
Это простая доска объявлений, намерение изучать операции CRUD в Casbah. Проблемы в том, что я обнаружил, что когда я перечисляю сообщения, у меня нет возможности однозначно ссылаться на запись в MongoDB на сайте.
Мой текущий код ниже.
Проблема, которая у меня есть, заключается в том, что ObjectId не может быть выброшен в строку. Но без уникального идентификатора для каждой строки я не могу предоставить функцию удаления с веб -страницы.
Есть ли стандартный способ обработки этих вещей с помощью Casbah? Все учебные пособия, которые я видел, игнорировали уникальный доступ к записям с веб -страницы или полностью игнорировали Scalatra и сосредоточены только на обработке записей из кода 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"}
Решение
Вы не можете разыграть, но вы можете сделать это как струнку Eastilly после:
i.getAs[ObjectId]("_id") map (_.toString) getOrElse "???"
И в шаблоне вы можете сделать это
#{l.id.toString}