Domanda

Sto imparando Scala e MongoDB e quali sto usando Scalatra e Casbah come il quadro di una semplice applicazione web.

Si tratta di una semplice bacheca, l'intenzione di imparare le operazioni CRUD in Casbah. I problemi sono io sto trovando che quando vi elenco i messaggi non ho modo di fare riferimento in modo univoco un record nel MongoDB sul sito.

Il mio codice attuale è al di sotto.

Il problema che sto avendo è che un ObjectID non può essere gettato in una stringa. Ma senza un ID univoco per ogni riga, non posso fornire una funzione di eliminazione dalla pagina web.

C'è un modo standard di gestire queste cose usando Casbah? Tutti i tutorial che ho visto hanno ignorato i record di accesso in modo univoco da una pagina Web o completamente scalatra ignorato e concentrata solo sulla gestione record dal codice 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"}
È stato utile?

Soluzione

Non si può lanciare, ma si può rendere come una stringa easilly dopo:

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

E nel modello che si potrebbe fare questo

#{l.id.toString}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top