scala - Get a string from an object in the template -


imagine have case class so:

   case class team(_id: option[bsonobjectid], name: string = "", city: string = "", country: string = "") 

and passing template (in play 2.5/scala/reactivemongo 0.11.14) this:

   @(teams : seq[models.team])     ...        @for(team <- teams){             <tr>                 <td>@team._id</td>                 <td>@team.name</td>                 <td>@team.city</td>                 <td>@team.country</td>             </tr>       }     ... 

i need @team._id (which type option[bsonobjectid]) string - bsonobjectid characters string. have been trying declare reusable values documented here can't seem right. ordinarily use flatmap isn't working expected within template. help!


following on seems should use method within case case class @marcospereira suggested. little stuck (unsurprisingly!) on syntax in regex expression. trying make string - bsonobjectid("59654f33b17946eac2323b3e") 59654f33b17946eac2323b3e. have:

def idasstring = _id.flatmap(bson => """\".*?(")""".r.findfirstin(bson.tostring)).getorelse("") 

but returns quotation marks, e.g. "59654f33b17946eac2323b3e". mentioned don't want - can can't quite syntax right.

you can like:

case class team(_id: option[bsonobjectid] = none, name: string = "", city: string = "", country: string = "") {      def idasstring(): string = _id.getorelse("")  } 

and then:

<td>@team.idasstring()</td> 

notice i've add none default _id. can have "view helper" this:

package helpers  object optionviewhelpers {   def optionvaluetostring(o: option[_]): string = o match {     case some(v) => string.valueof(v)     case _ => ""   } } 

and view:

@import helpers._  <td>@{optionviewhelpers.optionvaluetostring(team._id)}</td> 

the advantage here can reuse in other scenarios.


Comments

Popular posts from this blog

networking - Vagrant-provisioned VirtualBox VM is not reachable from Ubuntu host -

c# - ASP.NET Core - There is already an object named 'AspNetRoles' in the database -

ruby on rails - ArgumentError: Missing host to link to! Please provide the :host parameter, set default_url_options[:host], or set :only_path to true -