ScalatraとCasbahを使用したCRUD操作
質問
私はScalaとMongodbを学んでいますが、ScalatraとCasbahをシンプルなWebアプリのフレームワークとして使用しています。
これは単純な掲示板であり、カスバでのCRUD作戦を学ぶ意図です。問題は、メッセージをリストするときに、サイトのMongoDBのレコードを一意に参照する方法がないことを発見しています。
私の現在のコードは以下にあります。
私が抱えている問題は、ObjectIDを文字列に投げ込むことができないということです。ただし、各行の一意のIDがなければ、Webページから削除関数を提供することはできません。
カスバを使用してこれらのものを処理する標準的な方法はありますか?私が見たすべてのチュートリアルは、Webページからのレコードへのユニークなアクセスを無視しているか、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"}
解決
キャストすることはできませんが、後に弦としてレンダリングすることができます。
i.getAs[ObjectId]("_id") map (_.toString) getOrElse "???"
テンプレートでは、これを行うことができます
#{l.id.toString}
所属していません StackOverflow