Pregunta

Estoy aprendiendo Scala y MongoDB y tal estoy usando Scalatra y Casbah como el marco para una aplicación web simple.

Es un tablón de mensajes simple, la intención de aprender operaciones CRUD en Casbah. Los problemas es descubrir que cuando enumero los mensajes no tengo forma de hacer referencia de forma única a un registro en MongoDB en el sitio.

Mi código actual está a continuación.

El problema que estoy teniendo es que un objeto no se puede lanzar en una cadena. Pero sin una identificación única para cada fila, no puedo proporcionar una función de eliminación desde la página web.

¿Existe una forma estándar de manejar estas cosas usando Casbah? Todos los tutoriales que he visto han ignorado los registros de acceso exclusivo desde una página web o de Scalatra completamente ignorado y se centran solo en el manejo de registros del código 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"}
¿Fue útil?

Solución

No puedes elegir pero puedes renderizarlo como una cadena Easilly después:

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

Y en la plantilla podrías hacer esto

#{l.id.toString}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top