我有以下课程:
case class Profile(email: Option[String],
firstName: Option[String],
lastName: Option[String],
fullName: Option[String])
Run Code Online (Sandbox Code Playgroud)
现在我想删除该fullName属性,因为它是多余的.但是,我的类中有一个方法User返回fullName:
case class User(id: UUID, profiles: List[Profile]) {
// Skipped some lines
def fullName(loginInfo:LoginInfo) = profileFor(loginInfo).flatMap(_.fullName)
}
Run Code Online (Sandbox Code Playgroud)
现在我试图.flatMap(_.fullName)用firstName+ 的串联替换该部分lastName.如何才能做到这一点?我需要制作一个新的Option[String],像这样:
def fullName(loginInfo:LoginInfo) = {
val firstName = profileFor(loginInfo).flatMap(_.firstName)
val lastName = profileFor(loginInfo).flatMap(_.lastName)
val fullName : Option[String] = Some(firstName + " " + lastName)
fullName
}
Run Code Online (Sandbox Code Playgroud) 在我的custom模块中的Play HTML模板中,我有以下代码行:
<script type="text/javascript" src="@controllers.core.routes.WebJarAssets.at(WebJarAssets.locate("jquery.min.js"))"></script>
Run Code Online (Sandbox Code Playgroud)
这引用了模块中的WebJarAssets类,core如下所示:
package controllers.core
import javax.inject._
import play.api.http.HttpErrorHandler
import play.api.{Environment, Configuration}
class WebJarAssets @Inject()(errorHandler: HttpErrorHandler, configuration: Configuration, environment: Environment) extends controllers.WebJarAssets(errorHandler, configuration, environment)
Run Code Online (Sandbox Code Playgroud)
请注意,我也包含在以下行build.sbt中custom模块:
"org.webjars" %% "webjars-play" % "2.5.0",
Run Code Online (Sandbox Code Playgroud)
启动应用程序时,我收到以下错误:
[error] /Users/john/DemoProject/modules/custom/app/views/custom/templates/main.scala.html:36: not found: value WebJarAssets
[error] <script type="text/javascript" src="@controllers.core.routes.WebJarAssets.at(WebJarAssets.locate("jquery.min.js"))"></script>
[error] ^
Run Code Online (Sandbox Code Playgroud)
从早期版本中的WebJarAssets的实现来看,没有必要为此实现和注入自己的控制器(例如,参见本教程).
我究竟做错了什么?我是否需要一个WebJarAssets类(因为我在许多模块中需要web jar资产,我现在在core模块中添加了这个).此外,为什么我需要在模板中手动注入它,为什么不自动解决?
万一你想知道手动注入对我来说意味着什么:
@(title: String, webJarAssets: WebJarAssets)(content: Html)(implicit messages:Messages)
<script type="text/javascript" src="@controllers.core.routes.WebJarAssets.at(webJarAssets.locate("jquery.min.js"))"></script>
Run Code Online (Sandbox Code Playgroud) 让我们考虑一下我有一个users具有age属性的集合。现在,我要计算集合中的所有文档users或仅统计与age属性匹配的文档。因此,我做了以下工作:
def count(age: Option[Int] = None) = {
if (age.isEmpty) roles.count()
else users.count(Json.obj("age" -> age))
}
Run Code Online (Sandbox Code Playgroud)
问题是users.count(Json.obj("age" -> age))抛出编译错误,因为count反应性mongo提供的方法需要类型Option[pack.Document]。知道我该如何解决吗?
如果重要的话,我正在使用Reactive Mongo版本0.11.11。