저는 Scala와 MongoDB를 배우고 있습니다. Scalatra와 Casbah를 간단한 웹 앱의 프레임 워크로 사용하고 있습니다.Scalatra와 Casbah를 사용한 CRUD 작업
이것은 간단한 메시지 게시판이며, Casbah에서 CRUD 작업을 배우려는 의도입니다. 문제는 내가 메시지를 나열 할 때 사이트의 MongoDB에서 레코드를 유일하게 참조 할 수있는 방법이 없다는 것을 알게되었습니다.
현재 코드는 아래와 같습니다.
내가 가지고있는 문제는 ObjectID를 문자열로 변환 할 수 없다는 것입니다. 그러나 각 행에 대한 고유 ID가 없으면 웹 페이지에서 삭제 기능을 제공 할 수 없습니다.
Casbah를 사용하여 이러한 것들을 처리하는 표준 방법이 있습니까? 필자가 보았던 모든 자습서는 웹 페이지에서 레코드에 고유하게 액세스하거나 무시한 스칼래트를 무시하고 스칼라 코드에서 레코드를 처리하는 데에만 집중했습니다.
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
[email protected] 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"}
l.id.toString 접근법에 대해 설명했습니다. 그런 다음 삭제 메소드에서 문자열을 구문 분석하여 게시물을 제거하면 큰 감사를드립니다. –
이제 i.getAs [ObjectId] ("_ id"). toString이 작동하지 않는 이유를 알고 있다면? 확실히 i.getAs [ObjectId] ("_ id")는 ObjectId를 반환해야하고 ObjectId는 .toString 메서드를 가지고 있으므로 i.getAs [ObjectId] ("_ id")가 작동하지 않습니다. –
Some 또는 None을 반환하기 때문에. 따라서'toString'은 문자열'Some (<당신의 id는 string>)''또는 문자열' "None"' –